Skip to main content

manabrew_engine/ability/effects/
ownership_gain_effect.rs

1//! GainOwnership — change ownership of a card (rare silver-bordered).
2//! Ported from Java's OwnershipGainEffect: changes the owner of target cards
3//! to the defined player.
4
5use super::EffectContext;
6use crate::ids::CardId;
7
8/// Struct form of this effect so it can participate in the
9/// `SpellAbilityEffect` trait hierarchy — mirrors Java's
10/// `OwnershipGainEffect` class extending `SpellAbilityEffect`.
11#[manabrew_engine_macros::spell_effect(OwnershipGainEffect)]
12fn resolve(ctx: &mut EffectContext, sa: &crate::spellability::SpellAbility) {
13    let new_owner = if let Some(def) = sa.defined_player() {
14        let players = super::resolve_defined_players(def, sa.activating_player, ctx.game);
15        players.into_iter().next().unwrap_or(sa.activating_player)
16    } else {
17        sa.activating_player
18    };
19
20    let targets: Vec<CardId> = if let Some(target) = sa.target_chosen.target_card {
21        vec![target]
22    } else if let Some(source) = sa.source {
23        ctx.game.card(source).remembered_cards.clone()
24    } else {
25        return;
26    };
27
28    for card_id in targets {
29        // Change ownership — in Magic this is extremely rare (silver-bordered only)
30        ctx.game.card_mut(card_id).set_owner(new_owner);
31        ctx.game.card_mut(card_id).set_controller(new_owner);
32    }
33}