// PRAGMA MARK - IRecycleSetupSubscriber Implementation
        void IRecycleSetupSubscriber.OnRecycleSetup()
        {
            if (GameModesProgression.RecentlyUnlockedGameMode != null)
            {
                text_.Text = "Unlocked New Game Mode!";
            }
            else
            {
                int playsUntilNextUnlock = GameModesProgression.PlaysUntilNextUnlock();
                if (playsUntilNextUnlock > 1)
                {
                    text_.Text = string.Format("New Game Mode in <b>{0}</b> games!", playsUntilNextUnlock);
                }
                else
                {
                    text_.Text = string.Format("New Game Mode in <b>{0}</b> game!", playsUntilNextUnlock);
                }
            }

            transition_.AnimateIn(() => {
                this.DoAfterDelay(kDuration, () => {
                    transition_.AnimateOut(() => {
                        ObjectPoolManager.Recycle(this);
                    });
                });
            });
        }
        // PRAGMA MARK - Static Public Interface
        public static void ShowIfPossible()
        {
            if (!InGameConstants.ShowNextGameModeUnlockView)
            {
                return;
            }

            if (GameModesProgression.RecentlyUnlockedGameMode == null && !GameModesProgression.HasLockedGameModes())
            {
                return;
            }

            ObjectPoolManager.CreateView(GamePrefabs.Instance.GameModesProgressionNextUnlockViewPrefab);
        }