Пример #1
0
    void Update()
    {
        //Move marbles
        MoveHandMarbles();

        if (turn != GameState.Paused)
        {
            //Do every step
            UpdateSlotSprite();

            //Time
            ProgressTime();

            //Text Display
            InstructionDisplay();

            //Click Input
            Touch[] touches = new Touch[0];
#if UNITY_EDITOR
            if (Input.GetMouseButtonDown(0))
            {
                touches             = new Touch[1];
                touches[0]          = new Touch();
                touches[0].phase    = TouchPhase.Began;
                touches[0].position = Input.mousePosition;
            }
#elif UNITY_ANDROID
            touches = Input.touches;
#endif

            //Game Turn
            switch (turn)
            {
            case GameState.PickingStartSlot:
                foreach (Touch i in touches)
                {
                    Slot slot = FindSlotOnTouch(i);
                    if (slot != null)
                    {
                        //Select start
                        if (slot.slotID >= 0 && slot.slotID <= 6)
                        {
                            nextSlot[0] = slot.slotID;
                            AudioController.instance.PlaySoundEffect(Context.MarblePlace);
                        }
                        else if (slot.slotID >= 8 && slot.slotID < 15)
                        {
                            nextSlot[1] = slot.slotID;
                            AudioController.instance.PlaySoundEffect(Context.MarblePlace);
                        }

                        //If both player slected
                        if (nextSlot[0] > -1 && nextSlot[1] > -1)
                        {
                            //Start Game
                            turn = GameState.BothTurns;
                            //Give player marbles
                            slots[nextSlot[0]].SurrenderMarbles(0);
                            slots[nextSlot[1]].SurrenderMarbles(1);
                            //Move Slot by 1
                            ProgressSlot(0);
                            ProgressSlot(1);
                        }
                    }
                }
                break;

            case GameState.BothTurns:
                foreach (Touch i in touches)
                {
                    Slot slot = FindSlotOnTouch(i);
                    if (slot != null)
                    {
                        //First Turn
                        PlayerTurn(0, slot);
                        PlayerTurn(1, slot);
                    }
                }

                //Record who done first. He will move next
                if (doneFirst < 0)
                {
                    if (turnDone[0])
                    {
                        doneFirst = 0;
                        ForfeitHand(0);
                    }
                    else if (turnDone[1])
                    {
                        doneFirst = 1;
                        ForfeitHand(1);
                    }
                }

                //If time is up, surrender all marble in hand to the opponent
                if (turnDone[0])
                {
                    ForfeitHand(0);
                }
                else if (turnDone[1])
                {
                    ForfeitHand(1);
                }

                //Setup Next Turn
                if (turnDone[0] && turnDone[1])
                {
                    turn = (GameState)((int)GameState.P1Turn + 1);
                    StartCoroutine(TurnInBetween(doneFirst));
                }
                break;

            case GameState.P1Turn:
                foreach (Touch i in touches)
                {
                    Slot slot = FindSlotOnTouch(i);
                    if (slot != null)
                    {
                        //P1 Turn
                        PlayerTurn(0, slot);
                    }
                }

                if (turnDone[0])
                {
                    //Setup next turn
                    if (PlayerValidSlotsNumber(1) > 0)
                    {
                        StartCoroutine(TurnInBetween(1));
                    }
                    else
                    {
                        StartCoroutine(TurnInBetween(0));
                    }

                    //Surrender held marbles to the opponent
                    if (marblesHand[0].Count > 0)
                    {
                        slots[7].StoreMarbles(marblesHand[0]);
                        marblesHand[0] = new List <GameObject>();
                    }
                }
                break;

            case GameState.P2Turn:
                foreach (Touch i in touches)
                {
                    Slot slot = FindSlotOnTouch(i);
                    if (slot != null)
                    {
                        //P2 Turn
                        PlayerTurn(1, slot);
                    }
                }

                //Turn down checker
                if (turnDone[1])
                {
                    if (PlayerValidSlotsNumber(0) > 0)
                    {
                        StartCoroutine(TurnInBetween(0));
                    }
                    else
                    {
                        StartCoroutine(TurnInBetween(1));
                    }
                    if (marblesHand[1].Count > 0)
                    {
                        slots[15].StoreMarbles(marblesHand[1]);
                        marblesHand[1] = new List <GameObject>();
                    }
                }
                break;

            case GameState.GameEnd:
                if (touches.Length > 0)
                {
                    if (roundsToWin > 0)
                    {
                        if (wins[0] == roundsToWin || wins[1] == roundsToWin)
                        {
                            turn = GameState.ResultScreen;
                            endGameScreen.EnableCanvas(false, GenerateTips(), PickDefeatedPotraits());
                            GPGSHandler.instance.UnlockAchievement(GPGSIds.achievement_wingman);
                            GPGSHandler.instance.IncrementEvent(GPGSIds.event_2p_match_ended);
                        }
                        else
                        {
                            ResetMarbles();
                        }
                    }
                    else
                    {
                        ResetMarbles();
                    }
                }
                break;

            case GameState.InBetweens:
                //Nothing
                break;

            case GameState.AdvertisingWait:
                StartCoroutine(WaitForAd());
                break;

            case GameState.Advertising:
                if (!AdManager.instance.interstitialUp)
                {
                    turn = GameState.GameEnd;
                }
                break;
            }

            //Game End
            List <GameState> endStates = new List <GameState>();
            endStates.Add(GameState.ResultScreen);
            endStates.Add(GameState.GameEnd);
            endStates.Add(GameState.Advertising);
            endStates.Add(GameState.AdvertisingWait);
            endStates.Add(GameState.InBetweens);
            if (!endStates.Contains(turn) && PlayerValidSlotsNumber(0) == 0 && PlayerValidSlotsNumber(1) == 0 && marblesHand[0].Count == 0 && marblesHand[1].Count == 0)
            {
                turn = GameState.AdvertisingWait;
                if (slots[7].MarbleAmount() > slots[15].MarbleAmount())
                {
                    wins[1]++;
                    winner = 1;
                }
                else if (slots[7].MarbleAmount() < slots[15].MarbleAmount())
                {
                    wins[0]++;
                    winner = 0;
                }
                winsText.text = wins[0] + "-" + wins[1];
                AdManager.instance.ShowInterstitial();
            }
        }
    }