// Clean up should be done in the EndNegotiationLost/EndNegotiationWon functions.
    // Get the player and enemy from the turn manager. Deep-copy their permadecks to their draw pile.
    public void StartNegotiation(RenderNegotiation renderer, AbstractEnemy enemyChar, RewardType rewardsOnWin = RewardType.NORMAL)
    {
        this.player       = (GameState.mainChar == null) ? new PlayerDeckard() : GameState.mainChar; // null check for player - if null, use Deckard as base
        this.enemy        = (enemyChar == null) ? new TestEnemy() : this.enemy;                      // null check for enemy - if null, use TestEnemy as base
        this.rewardsOnWin = rewardsOnWin;
        tm.AddToTurnList(player);
        tm.AddToTurnList(enemy);

        this.renderer = renderer;

        em.ClearAllSubscribers();
        em.SubscribeToEvent(this, EventType.CARD_PLAYED);        // Subscribe to CARD_PLAYED event to perform all post-card play processing (ambience shift, adjusting global values, etc.)
        em.SubscribeToEvent(this, EventType.ARGUMENT_DESTROYED); // Subscribe to ARGUMENT_DESTROYED event to perform enemy intent recalculations whenever an argument is destroyed

        Debug.Log("NegotiationManager.cs: Performing deep copy of deck contents for enemy and player.");
        DeepCopyDeck(player);
        DeepCopyDeck(enemy);

        this.player.curAP             = player.maxAP;
        this.enemy.curAP              = enemy.maxAP;
        this.enemy.coreArgument.curHP = this.enemy.coreArgument.maxHP;

        player.Draw(5);
        enemy.Draw(5);

        player.coreArgument.TriggerOnDeploy();
        enemy.coreArgument.TriggerOnDeploy();
        em.TriggerEvent(new EventTurnStart(tm.GetCurrentCharacter()));

        Debug.Log("Negotiation begins!");

        enemy.CalculateIntents();
        // foreach(EnemyIntent intent in enemy.intents){
        //     Debug.Log($"The enemy intends to play {intent.cardToPlay} on {intent.argumentTargeted}");
        // }
    }
 public override int Resolve()
 {
     // AbstractCharacter Draw() implementation handles special cases of max hand size, not being able to draw, etc. automatically, so that work doesn't need to be done here.
     source.Draw(this.cardsToDraw);
     return(0);
 }