public void RevealPickedCards(Func <CardManagement, CardManagement, WinningResolution> winningDetermination, Action postAction) { var playerHandManager = GameObject.Find("Player Hand").GetComponent <CardHoldingManagement>(); var opponentHandManager = GameObject.Find("Opponent Hand").GetComponent <CardHoldingManagement>(); CardsRevealed += (sender1, args1) => { Delegate[] handlers1 = CardsRevealed.GetInvocationList(); handlers1.ToList().ForEach(d => { CardsRevealed -= d as EventHandler; }); CardsRevealed += (sender2, args2) => { Delegate[] handlers2 = CardsRevealed.GetInvocationList(); handlers2.ToList().ForEach(d => { CardsRevealed -= d as EventHandler; }); var button = GameObject.FindGameObjectWithTag("Interface") .transform.FindChild("Battle Button").GetComponent <Button>(); UnityAction buttonClickListener = () => { button.gameObject.SetActive(false); button.onClick.RemoveAllListeners(); var winningResolver = winningDetermination(PlayerBattleCard.GetComponent <CardManagement>(), OpponentBattleCard.GetComponent <CardManagement>()); DiscardBattleCards(() => { CardsReplenished += (sender3, args3) => { Delegate[] handlers3 = CardsReplenished.GetInvocationList(); handlers3.ToList().ForEach(d => { CardsReplenished -= d as EventHandler; }); CardsReplenished += (o1, eventArgs1) => { Delegate[] handlers4 = CardsReplenished.GetInvocationList(); handlers4.ToList().ForEach(d => { CardsReplenished -= d as EventHandler; }); winningResolver.Resolve(CurrentPawnMover.GetComponent <BattleOutcomeHandling>(), postAction); }; }; SetStatusText("The hands are being replenished"); DrawingCardDeckManager.DealCardTo(CurrentHandManager, OnCardsReplenished); DrawingCardDeckManager.DealCardTo(CurrentHandManager.OpposingCardHoldingManager, OnCardsReplenished); }); }; button.onClick.AddListener(buttonClickListener); button.gameObject.SetActive(true); SetStatusText("Start the battle"); }; }; //TODO: Change the determination of vectors based on the card transform var newPositionForPlayerCard = new Vector3(17.0f, 37.0f, -12.5f); var newRotationForPlayerCard = new Vector3(-30.0f, 0.0f, 0.0f); var playerCard = playerHandManager.ShowPickedCard(newPositionForPlayerCard, newRotationForPlayerCard, OnCardsRevealed); var newPositionForOpponentCard = new Vector3(27.0f, 37.0f, -12.5f); var newRotationForOpponentCard = new Vector3(-30.0f, 0.0f, 0.0f); var opponentCard = opponentHandManager.ShowPickedCard(newPositionForOpponentCard, newRotationForOpponentCard, OnCardsRevealed); PlayerBattleCard = playerCard; OpponentBattleCard = opponentCard; }