manabrew-engine 0.6.2

Magic: The Gathering rules engine — a Rust port of Forge
Documentation
//! AssignGroup — assign creatures to groups (Conspiracy draft).
//! Ported from Java's AssignGroupEffect: assigns defined objects to groups
//! chosen by the player, then resolves sub-abilities for each group.

use super::EffectContext;
use crate::ids::CardId;

/// Struct form of this effect so it can participate in the
/// `SpellAbilityEffect` trait hierarchy — mirrors Java's
/// `AssignGroupEffect` class extending `SpellAbilityEffect`.
#[manabrew_engine_macros::spell_effect(AssignGroupEffect)]
fn resolve(ctx: &mut EffectContext, sa: &crate::spellability::SpellAbility) {
    let source = match sa.source {
        Some(s) => s,
        None => return,
    };

    // Get defined cards to assign
    let targets: Vec<CardId> = if let Some(target) = sa.target_chosen.target_card {
        vec![target]
    } else {
        ctx.game.card(source).remembered_cards.clone()
    };

    if targets.is_empty() {
        return;
    }

    // Auto-assign all to group 1 (agent would choose in full implementation)
    // Remember the assigned cards
    for card_id in &targets {
        ctx.game.card_mut(source).add_remembered_card(*card_id);
    }
}