예제 #1
0
    private UniRx.IObservable <float> CreateGearSetBonusMultiplier(BonusTypeEnum bonusType, int setIndex, float mult)
    {
        GearSetRunner orCreateGearSetRunner = GetOrCreateGearSetRunner(setIndex);

        return(from level in orCreateGearSetRunner.MaxAllLevel
               select(level < 1) ? BonusTypeHelper.GetOrigin(bonusType) : mult);
    }
예제 #2
0
 public CumulativeBonusRunner()
 {
     for (int i = 0; i < 25; i++)
     {
         BonusMult[i] = new ReactiveProperty <BigDouble>(BonusTypeHelper.GetOrigin((BonusTypeEnum)i));
     }
 }
예제 #3
0
    private void CalculateTrophiesMultiplier(int tier)
    {
        BigDouble bigDouble  = new BigDouble(1.0);
        BigDouble bigDouble2 = new BigDouble(1.0);
        BigDouble bigDouble3 = new BigDouble(1.0);

        for (int i = 1; i <= tier; i++)
        {
            TournamentTierConfig tournamentTierConfig = Singleton <EconomyHelpers> .Instance.GetTournamentTierConfig(i);

            Func <BigDouble, float, BigDouble> func = BonusTypeHelper.CreateBigDoubleFunction(tournamentTierConfig.Bonus.BonusType);
            switch (tournamentTierConfig.Bonus.BonusType)
            {
            case BonusTypeEnum.TapDamage:
                bigDouble = func(bigDouble, tournamentTierConfig.Bonus.Amount);
                break;

            case BonusTypeEnum.AllCompanionDamage:
                bigDouble2 = func(bigDouble2, tournamentTierConfig.Bonus.Amount);
                break;

            case BonusTypeEnum.AllDamage:
                bigDouble3 = func(bigDouble3, tournamentTierConfig.Bonus.Amount);
                break;
            }
        }
        TrophyHeroDamageMultiplier.Value      = bigDouble;
        TrophyCompanionDamageMultiplier.Value = bigDouble2;
        TrophyAllDamageMultiplier.Value       = bigDouble3;
    }
예제 #4
0
    private UniRx.IObservable <float> CreateHeroBonusMultiplier(BonusTypeEnum bonusType, int heroIndex, float mult, int milestone)
    {
        HeroRunner orCreateHeroRunner = Singleton <HeroTeamRunner> .Instance.GetOrCreateHeroRunner(heroIndex);

        return(from level in orCreateHeroRunner.Level
               select(level < milestone) ? BonusTypeHelper.GetOrigin(bonusType) : mult);
    }
예제 #5
0
    private UniRx.IObservable <BigDouble> CreateCombinedObservable(int typeIndex)
    {
        Func <BigDouble, float, BigDouble> func = BonusTypeHelper.CreateBigDoubleFunction((BonusTypeEnum)typeIndex);

        return(from bonus in Singleton <PerkMilestoneRunner> .Instance.BonusMult[typeIndex].CombineLatest(Singleton <GearBoostRunner> .Instance.BonusMult[typeIndex], (BigDouble bonus, float mult) => func(bonus, mult)).CombineLatest(Singleton <GearSetCollectionRunner> .Instance.BonusMult[typeIndex], (BigDouble bonus, float mult) => func(bonus, mult))
               select(!(bonus >= BigDouble.ZERO)) ? BigDouble.ZERO : bonus);
    }
예제 #6
0
    private UniRx.IObservable <float> CreateObservableForAll(BonusTypeEnum bonusType)
    {
        List <UniRx.IObservable <float> > multipliers = (from config in PersistentSingleton <Economies> .Instance.GearSets
                                                         where config.Bonus.BonusType == bonusType
                                                         select CreateGearSetBonusMultiplier(bonusType, config.SetIndex, config.Bonus.Amount)).ToList();

        return(BonusTypeHelper.CreateCombine(bonusType, multipliers));
    }
예제 #7
0
    private UniRx.IObservable <BigDouble> CreateObservableForAll(BonusTypeEnum bonusType)
    {
        List <UniRx.IObservable <float> > multipliers = PersistentSingleton <Economies> .Instance.PerkMilestoneConfigs.SelectMany((PerkMilestoneConfig config) => from i in Enumerable.Range(0, config.Items.Count)
                                                                                                                                  where config.Items[i].BonusType == bonusType
                                                                                                                                  select CreateHeroBonusMultiplier(bonusType, config.Hero, config.Items[i].Amount, PersistentSingleton <Economies> .Instance.PerkMilestones[i])).ToList();

        return(from mult in BonusTypeHelper.CreateCombine(bonusType, multipliers)
               select new BigDouble(mult));
    }
예제 #8
0
    private UniRx.IObservable <float> CreateObservableForAll(BonusTypeEnum bonusType)
    {
        List <UniRx.IObservable <float> > mult = (from config in PersistentSingleton <Economies> .Instance.Gears
                                                  where config.Boost1.Mult.BonusType == bonusType
                                                  select Singleton <GearCollectionRunner> .Instance.GetOrCreateGearRunner(config.GearIndex).Boost1Amount.AsObservable()).ToList();
        List <UniRx.IObservable <float> > mult2 = (from config in PersistentSingleton <Economies> .Instance.Gears
                                                   where config.Boost2.Mult.BonusType == bonusType
                                                   select Singleton <GearCollectionRunner> .Instance.GetOrCreateGearRunner(config.GearIndex).Boost2Amount.AsObservable()).ToList();

        return(BonusTypeHelper.CreateCombineStacking(bonusType, mult, mult2));
    }
예제 #9
0
 private float GetBonusAmount(GearBoostStruct boost, int boostAmount, bool initial)
 {
     if (initial)
     {
         return(boost.Mult.Amount + boost.LevelUpAmount * (float)(boostAmount - 1));
     }
     if (BonusTypeHelper.IsTimeType(boost.Mult.BonusType))
     {
         return(boost.LevelUpAmount * (float)boostAmount);
     }
     return(boost.LevelUpAmount * (float)boostAmount + 1f);
 }
예제 #10
0
    public PerkRunner(int perkIndex, HeroRunner hero)
    {
        SceneLoader instance = SceneLoader.Instance;

        PerkIndex = perkIndex;
        Hero      = hero;
        Unlocked  = (from count in Hero.UnlockedPerkCount
                     select count > perkIndex).TakeUntilDestroy(instance).ToReactiveProperty();
        AtLevel = new ReactiveProperty <int>(PersistentSingleton <Economies> .Instance.PerkMilestones[PerkIndex]);
        BonusMultConfig bonusMultConfig = PersistentSingleton <Economies> .Instance.PerkMilestoneConfigs[Hero.HeroIndex].Items[PerkIndex];

        LocalizedTitle = new ReactiveProperty <string>(PersistentSingleton <LocalizationService> .Instance.Text("Perk." + bonusMultConfig.BonusType + ".Title"));
        LocalizedDesc  = new ReactiveProperty <string>(BonusTypeHelper.GetAttributeText(bonusMultConfig.BonusType, bonusMultConfig.Amount));
    }
예제 #11
0
    private void ShowPerkUnlock(int hero, int perk)
    {
        if (PlayerData.Instance.HeroStates[hero].Level.Value >= PlayerData.Instance.HeroStates[hero].LifetimeLevel.Value)
        {
            base.gameObject.SetActive(value: true);
            BonusMultConfig bonusMultConfig = PersistentSingleton <Economies> .Instance.PerkMilestoneConfigs[hero].Items[perk];
            m_perkParent.transform.DestroyChildrenImmediate();
            GameObject gameObject = GameObjectExtensions.InstantiateFromResources(GetPrefabPath(bonusMultConfig));
            gameObject.transform.SetParent(m_perkParent.transform, worldPositionStays: false);
            m_perkName.text = PersistentSingleton <LocalizationService> .Instance.Text("Perk." + bonusMultConfig.BonusType + ".Title");

            m_perkAttribute.text = BonusTypeHelper.GetAttributeText(bonusMultConfig.BonusType, bonusMultConfig.Amount);
        }
    }
예제 #12
0
    private void OnEnable()
    {
        Text           component = base.gameObject.GetComponent <Text>();
        TournamentTier tier      = m_tier;

        if (m_tier == TournamentTier.Invalid)
        {
            tier = (TournamentTier)PlayerData.Instance.Trophies.Value;
        }
        if (m_placement == Placement.Title)
        {
            component.text = PersistentSingleton <LocalizationService> .Instance.Text("UI.Tournament.Trophies." + tier.ToString());

            return;
        }
        TournamentTierConfig tournamentTierConfig = Singleton <EconomyHelpers> .Instance.GetTournamentTierConfig((int)tier);

        component.text = BonusTypeHelper.GetAttributeText(tournamentTierConfig.Bonus.BonusType, tournamentTierConfig.Bonus.Amount);
    }
예제 #13
0
    public GearViewRunner(int gearIndex)
    {
        SceneLoader instance = SceneLoader.Instance;
        GearConfig  config   = PersistentSingleton <Economies> .Instance.Gears[gearIndex];

        LocalizedName = new ReactiveProperty <string>(PersistentSingleton <LocalizationService> .Instance.Text("Gear.Name." + gearIndex));
        LocalizedDesc = new ReactiveProperty <string>(PersistentSingleton <LocalizationService> .Instance.Text("Gear.Name.Desc." + gearIndex));
        GearRunner gearRunner = Singleton <GearCollectionRunner> .Instance.GetOrCreateGearRunner(gearIndex);

        int chunkUnlockLevel = PersistentSingleton <Economies> .Instance.GearSets[gearRunner.SetIndex].ChunkUnlockLevel;

        LocalizedChunkLevelRequirement = new ReactiveProperty <string>(PersistentSingleton <LocalizationService> .Instance.Text("Prestige.ChunkLevelRequirement", chunkUnlockLevel));
        Boost1Text = (from amount in gearRunner.Boost1Amount
                      select(gearRunner.Level.Value <= 0) ? config.Boost1.Mult.Amount : amount into amount
                      select BonusTypeHelper.GetAttributeText(config.Boost1.Mult.BonusType, amount)).TakeUntilDestroy(instance).ToReactiveProperty();
        Boost2Text = (from amount in gearRunner.Boost2Amount
                      select(gearRunner.Level.Value <= 0) ? config.Boost2.Mult.Amount : amount into amount
                      select BonusTypeHelper.GetAttributeText(config.Boost2.Mult.BonusType, amount)).TakeUntilDestroy(instance).ToReactiveProperty();
        Show = (from show in Singleton <GearSetCollectionRunner> .Instance.MaxSetsToShow
                select show > gearRunner.SetIndex).TakeUntilDestroy(instance).ToReactiveProperty();
        ShowPrestige = Show.CombineLatest(gearRunner.UpgradeAfterPrestigeAvailable, (bool show, bool avail) => show && avail).TakeUntilDestroy(instance).ToReadOnlyReactiveProperty();
        Boost1Step   = new ReactiveProperty <string>(BonusTypeHelper.GetStepText(config.Boost1.Mult.BonusType, config.Boost1.LevelUpAmount));
        Boost2Step   = new ReactiveProperty <string>(BonusTypeHelper.GetStepText(config.Boost2.Mult.BonusType, config.Boost2.LevelUpAmount));
        BundleBoost1 = (from comb in BundleBuyAmount.CombineLatest(gearRunner.Level, (int amount, int lvl) => new
        {
            amount,
            lvl
        })
                        select(comb.lvl != 0) ? GetBonusAmount(config.Boost1, comb.amount, initial: false) : GetBonusAmount(config.Boost1, comb.amount, initial: true) into amount
                        select BonusTypeHelper.GetAttributeText(config.Boost1.Mult.BonusType, amount)).TakeUntilDestroy(instance).ToReactiveProperty();
        BundleBoost2 = (from comb in BundleBuyAmount.CombineLatest(gearRunner.Level, (int amount, int lvl) => new
        {
            amount,
            lvl
        })
                        select(comb.lvl != 0) ? GetBonusAmount(config.Boost2, comb.amount, initial: false) : GetBonusAmount(config.Boost2, comb.amount, initial: true) into amount
                        select BonusTypeHelper.GetAttributeText(config.Boost2.Mult.BonusType, amount)).TakeUntilDestroy(instance).ToReactiveProperty();
    }
예제 #14
0
    public GearSetRunner(int setIndex)
    {
        SceneLoader instance = SceneLoader.Instance;

        GearRunners = (from gear in Singleton <GearCollectionRunner> .Instance.Gears()
                       where gear.SetIndex == setIndex
                       select gear).ToList();
        UniRx.IObservable <int> observable = Observable.Return(int.MaxValue);
        foreach (GearRunner gearRunner in GearRunners)
        {
            observable = observable.CombineLatest(gearRunner.Level, Mathf.Min);
        }
        UniRx.IObservable <int> observable2 = Observable.Return(0);
        foreach (GearRunner gearRunner2 in GearRunners)
        {
            observable2 = observable2.CombineLatest(gearRunner2.Level, Mathf.Max);
        }
        MaxAllLevel = observable.TakeUntilDestroy(instance).ToReactiveProperty();
        MaxAnyLevel = observable2.TakeUntilDestroy(instance).ToReactiveProperty();
        GearSet gearSet = PersistentSingleton <Economies> .Instance.GearSets[setIndex];

        SetBoostText = new ReactiveProperty <string>(BonusTypeHelper.GetAttributeText(gearSet.Bonus.BonusType, gearSet.Bonus.Amount));
    }
예제 #15
0
 private UniRx.IObservable <Func <float, float> > CreateGearBonusObservable(BonusTypeEnum bonusType, float levelUpAmount)
 {
     return(from lvl in Level
            select(lvl > 0) ? CreateGearBonusOperator(lvl - 1, levelUpAmount) : BonusTypeHelper.CreateIdentityFunc(bonusType));
 }
예제 #16
0
 private string GetMilestoneString(BonusTypeEnum bonusType, float amount)
 {
     return(BonusTypeHelper.GetAttributeText(bonusType, amount));
 }