Example #1
0
    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;
    }