protected void Start() { GearRunner gearRunner = (GearRunner)Singleton <PropertyManager> .Instance.GetContext("GearRunner", base.transform); UniRx.IObservable <CraftingRequirement> left = GearCollectionRunner.CreateBlocksObservable(); left.CombineLatest(gearRunner.UpgradeRequirement, (CraftingRequirement blks, CraftingRequirement req) => req).Subscribe(delegate(CraftingRequirement req) { SetupResources(req); }).AddTo(this); }
public GearRunner(int gearIndex) { SceneLoader instance = SceneLoader.Instance; GearIndex = gearIndex; Config = PersistentSingleton <Economies> .Instance.Gears[gearIndex]; GearState orCreateGearState = GearStateFactory.GetOrCreateGearState(gearIndex); Level = orCreateGearState.Level; Level.Skip(1).Subscribe(delegate { if (PersistentSingleton <GameAnalytics> .Instance != null) { PersistentSingleton <GameAnalytics> .Instance.GearUpgraded.Value = this; } }).AddTo(instance); SalvageRelicAmount = (from lvl in Level select GetSalvageAmount(GearIndex, lvl)).TakeUntilDestroy(instance).ToReactiveProperty(); SalvageGemCost = SalvageRelicAmount.Select(SalvageRelicsToGems.Evaluate).ToReactiveProperty(); Unlocked = (from lvl in Level select lvl >= 1).TakeUntilDestroy(instance).ToReactiveProperty(); (from pair in Unlocked.Pairwise() where pair.Current && !pair.Previous select pair).Subscribe(delegate { PlayerData.Instance.LifetimeGears.Value++; }).AddTo(instance); SalvageAvailable = PlayerData.Instance.Gems.CombineLatest(SalvageGemCost, (int gems, int cost) => gems >= cost).TakeUntilDestroy(instance).ToReactiveProperty(); UpgradeRequirement = (from lvl in Level select Singleton <EconomyHelpers> .Instance.GetGearUpgradeCost(GearIndex, lvl)).TakeUntilDestroy(instance).ToReactiveProperty(); MaxLevelReached = (from level in Level select level >= Config.MaxLevel).TakeUntilDestroy(instance).ToReactiveProperty(); UniRx.IObservable <CraftingRequirement> left = GearCollectionRunner.CreateBlocksObservable(); UpgradeAvailable = left.CombineLatest(UpgradeRequirement, (CraftingRequirement have, CraftingRequirement req) => have.Satisfies(req)).CombineLatest(MaxLevelReached, (bool sat, bool max) => sat && !max).TakeUntilDestroy(instance) .ToReactiveProperty(); UpgradeGemCost = left.CombineLatest(UpgradeRequirement, (CraftingRequirement have, CraftingRequirement req) => Singleton <EconomyHelpers> .Instance.GetCraftingGemCost(have, req)).TakeUntilDestroy(instance).ToReactiveProperty(); UpgradeAvailableWithGems = (from comb in UpgradeGemCost.CombineLatest(PlayerData.Instance.Gems, (int cost, int gems) => new { cost, gems }) select(comb.cost <= comb.gems) ? true : false).TakeUntilDestroy(instance).ToReadOnlyReactiveProperty(); UniRx.IObservable <CraftingRequirement> left2 = GearCollectionRunner.CreateAfterPrestigeBlocksObservable(); UpgradeAfterPrestigeAvailable = left2.CombineLatest(UpgradeRequirement, (CraftingRequirement have, CraftingRequirement req) => have.Satisfies(req)).CombineLatest(MaxLevelReached, (bool sat, bool max) => sat && !max).TakeUntilDestroy(instance) .ToReactiveProperty(); Boost1Amount = Observable.Return(Config.Boost1.Mult.Amount).CombineLatest(CreateGearBonusObservable(Config.Boost1.Mult.BonusType, Config.Boost1.LevelUpAmount), (float sum, Func <float, float> f) => f(sum)).TakeUntilDestroy(instance) .ToReactiveProperty(); Boost2Amount = Observable.Return(Config.Boost2.Mult.Amount).CombineLatest(CreateGearBonusObservable(Config.Boost2.Mult.BonusType, Config.Boost2.LevelUpAmount), (float sum, Func <float, float> f) => f(sum)).TakeUntilDestroy(instance) .ToReactiveProperty(); }