Beispiel #1
0
    public BoosterRunner(int booster)
    {
        SceneLoader instance = SceneLoader.Instance;

        BoosterIndex    = booster;
        m_boosterConfig = PersistentSingleton <Economies> .Instance.Boosters[BoosterIndex];
        if (BoosterIndex == 0)
        {
            m_maxBoosterAmount = PersistentSingleton <GameSettings> .Instance.MaxDamageBoosterPurchaseAmount;
        }
        else
        {
            m_maxBoosterAmount = PersistentSingleton <GameSettings> .Instance.MaxBoosterPurchaseAmount;
        }
        BoosterMaxReached = (from currentAmount in PlayerData.Instance.BoostersBought[BoosterIndex]
                             select currentAmount >= m_maxBoosterAmount).TakeUntilDestroy(instance).ToReadOnlyReactiveProperty();
        BoosterCost = (from amount in PlayerData.Instance.BoostersBought[BoosterIndex]
                       select Singleton <EconomyHelpers> .Instance.GetBoosterCost(BoosterIndex, amount)).TakeUntilDestroy(instance).ToReadOnlyReactiveProperty();
        BoosterAvailable  = BoosterCost.CombineLatest(PlayerData.Instance.Gems, (int cost, int gems) => cost <= gems).TakeUntilDestroy(instance).ToSequentialReadOnlyReactiveProperty();
        BoosterName.Value = PersistentSingleton <LocalizationService> .Instance.Text("GemBooster.Title." + (BoosterEnum)BoosterIndex);

        BoosterDescription.Value = PersistentSingleton <LocalizationService> .Instance.Text("GemBooster.Desc." + (BoosterEnum)BoosterIndex);

        BoosterBonus = (from _ in PlayerData.Instance.BoostersEffect[BoosterIndex]
                        select BoosterCollectionRunner.GetBoosterBonusString((BoosterEnum)BoosterIndex)).TakeUntilDestroy(instance).ToReadOnlyReactiveProperty();
        BoosterNextUpgrade = (from _ in BoosterCost
                              select BoosterCollectionRunner.GetBoosterNextUpgradeString((BoosterEnum)BoosterIndex)).TakeUntilDestroy(instance).ToReadOnlyReactiveProperty();
        ActiveBooster = (from active in Singleton <BoosterCollectionRunner> .Instance.ActiveBooster
                         select active == BoosterIndex).TakeUntilDestroy(instance).ToReadOnlyReactiveProperty();
    }
Beispiel #2
0
    public void PostInit()
    {
        SceneLoader instance = SceneLoader.Instance;

        if (PlayerData.Instance.WelcomebackTimeStamp.Value == 0)
        {
            PlayerData.Instance.WelcomebackTimeStamp.Value = ServerTimeService.NowTicks();
        }
        UniRx.IObservable <bool> source = from p in Observable.EveryApplicationPause().StartWith(value: false)
                                          select(p);
        (from _ in (from pause in source
                    where !pause
                    select pause into _
                    select(from sync in ServerTimeService.IsSynced
                           where sync
                           select sync).Take(1)).Switch()
         select new TimeSpan(ServerTimeService.NowTicks() - PlayerData.Instance.WelcomebackTimeStamp.Value).TotalSeconds into awaySecs
         where awaySecs >= 90.0 && PlayerData.Instance.TutorialStep.Value >= m_stepIndex
         select awaySecs into _
         select ServerTimeService.NowTicks() - PlayerData.Instance.WelcomebackTimeStamp.Value into deltaTicks
         select GetWelcomeBackCoins(deltaTicks)).Subscribe(delegate(BigDouble coins)
        {
            PlayerData.Instance.WelcomebackTimeStamp.Value = ServerTimeService.NowTicks();
            PlayerData.Instance.WelcomebackCoins.Value    += coins;
        }).AddTo(instance);
        (from _ in PersistentSingleton <MainSaver> .Instance.Saving
         select(from sync in ServerTimeService.IsSynced
                where sync
                select sync).Take(1)).Switch().Subscribe(delegate
        {
            PlayerData.Instance.WelcomebackTimeStamp.Value = ServerTimeService.NowTicks();
        }).AddTo(instance);
        (from prestige in Singleton <PrestigeRunner> .Instance.PrestigeTriggered
         where prestige == PrestigeOrder.PrestigeInit
         select prestige).Subscribe(delegate
        {
            PlayerData.Instance.WelcomebackCoins.Value = 0L;
        }).AddTo(instance);
        DoubleAdTime = (from _ in TickerService.MasterTicksSlow
                        select(float) Singleton <AdRunner> .Instance.GetNextTimeToShowAd(AdPlacement.DailyDouble).TotalSeconds into secsLeft
                        select(int) Mathf.Max(0f, secsLeft)).DistinctUntilChanged().TakeUntilDestroy(instance).ToReactiveProperty();
        DoubleAdAvailable = (from time in DoubleAdTime
                             select time <= 0).CombineLatest(Singleton <AdRunner> .Instance.AdReady, (bool time, bool ad) => time && ad).TakeUntilDestroy(instance).ToReadOnlyReactiveProperty();
        DoubleAdTimeLeft = DoubleAdTime.Select(delegate(int seconds)
        {
            string empty = string.Empty;
            return((seconds > 0) ? TextUtils.FormatSecondsShort(seconds) : PersistentSingleton <LocalizationService> .Instance.Text("AD.Placement.NotAvailable"));
        }).TakeUntilDestroy(instance).ToReadOnlyReactiveProperty();
        (from ad in Singleton <AdRunner> .Instance.AdPlacementFinished
         where ad == AdPlacement.DailyDouble
         select ad).Subscribe(delegate
        {
            DailyDoubleAdFinished();
        }).AddTo(instance);
        (from ad in Singleton <AdRunner> .Instance.AdPlacementSkipped
         where ad == AdPlacement.DailyDouble
         select ad).Subscribe(delegate
        {
            DailyDoubleAdSkipped();
        }).AddTo(instance);
        (from ad in Singleton <AdRunner> .Instance.AdPlacementFailed
         where ad == AdPlacement.DailyDouble
         select ad).Subscribe(delegate
        {
            DailyDoubleAdSkipped();
        }).AddTo(instance);
        WelcomeBackMultiplier = (from _ in PlayerData.Instance.BoostersEffect[3].AsObservable()
                                 select BoosterCollectionRunner.GetBoosterBonusString(BoosterEnum.DailyDoubleBoost)).TakeUntilDestroy(instance).ToReadOnlyReactiveProperty();
    }