From dd1aeb70360136a2f541390b4f209015c03337ed Mon Sep 17 00:00:00 2001 From: kimura Date: Fri, 29 Oct 2021 10:30:43 +0900 Subject: [PATCH] =?UTF-8?q?=E7=9B=A3=E8=A6=96=E3=81=99=E3=82=8BGameData?= =?UTF-8?q?=E3=82=92=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Assets/MyGame/Scripts/GameDataObserver.cs | 82 ++++++++++--------- 1 file changed, 44 insertions(+), 38 deletions(-) diff --git a/popcorn/Assets/MyGame/Scripts/GameDataObserver.cs b/popcorn/Assets/MyGame/Scripts/GameDataObserver.cs index 5619613b..f9333b80 100644 --- a/popcorn/Assets/MyGame/Scripts/GameDataObserver.cs +++ b/popcorn/Assets/MyGame/Scripts/GameDataObserver.cs @@ -7,52 +7,58 @@ using UnityEngine; public class GameDataObserver : SingletonMonoBehaviour { [SerializeField] private FloatReactiveProperty checkInterval = new FloatReactiveProperty(.1f); - private IObservable heartObserver; - public IObservable Heart => heartObserver; + private readonly Subject heartObserver = new Subject(); + private readonly Subject sceneCounter = new Subject(); + private readonly Subject shopLevelObserver = new Subject(); + private readonly Subject achievedMissionObserver = new Subject(); + private readonly Subject addCoinObserver = new Subject(); + private readonly Subject subCoinObserver = new Subject(); + private readonly Subject addCornObserver = new Subject(); + private readonly Subject addCustomerObserver = new Subject(); + private readonly Subject addSalesObserver = new Subject(); + private readonly Subject addRareSalesObserver = new Subject(); + private readonly Subject hasRecipeObserver = new Subject(); + private readonly Subject deliveredBulkOrderObserver = new Subject(); + private readonly BoolReactiveProperty updateMissionAchieved = new BoolReactiveProperty(); + public IReadOnlyReactiveProperty UpdateMissionAchieved => updateMissionAchieved; - private IObservable sceneCounter; - public IObservable SceneCounter => sceneCounter; - - public IObservable ShopLevelUpdate; + public IObservable ShopLevelUpdate { get; private set; } private void Start() { checkInterval.AddTo(this); + updateMissionAchieved.AddTo(this); var levelList = SpreadsheetDataManager.Instance.GetBaseDataList(Const.ShopLevelDataSheet); - heartObserver = checkInterval - .Select(x => - Observable.Interval(TimeSpan.FromSeconds(x)) - .Select(_ => GameDataManager.GameData.Heart) - .DistinctUntilChanged()) - .Switch(); - - var shopLevelObserver = checkInterval - .Select(x => - Observable.Interval(TimeSpan.FromSeconds(x)) - .Select(_ => GameDataManager.GameData.ViewedShopLevel) - .DistinctUntilChanged()) - .Switch(); + checkInterval.Select(x => Observable.Interval(TimeSpan.FromSeconds(x))).Switch().Subscribe(_ => + { + var gameData = GameDataManager.GameData; + heartObserver.OnNext(gameData.Heart); + sceneCounter.OnNext(UnityEngine.SceneManagement.SceneManager.sceneCount); + shopLevelObserver.OnNext(gameData.ViewedShopLevel); + achievedMissionObserver.OnNext(gameData.AchievedMission.Count); + // addCoinObserver.OnNext(gameData.TotalAddCoin); + subCoinObserver.OnNext(gameData.TotalSubCoin); + addCornObserver.OnNext(gameData.TotalAddCornSeed); + addCustomerObserver.OnNext(gameData.TotalCustomerCount); + addSalesObserver.OnNext(gameData.TotalSales); + addRareSalesObserver.OnNext(gameData.RareTotalSales); + hasRecipeObserver.OnNext(gameData.MyRecipes.Length); + deliveredBulkOrderObserver.OnNext(gameData.BulkOrderDeliveredCount); + }).AddTo(this); - sceneCounter = checkInterval - .Select(x => - Observable.Interval(TimeSpan.FromSeconds(x)) - .Select(_ => UnityEngine.SceneManagement.SceneManager.sceneCount) - .DistinctUntilChanged() - .Delay(TimeSpan.FromSeconds(.4f)) - // .Do(c => { Debug.Log($"sceneCount:{c}");}) - ) - .Switch(); - - ShopLevelUpdate = Observable.CombineLatest(heartObserver, shopLevelObserver, sceneCounter, - (heart, level, sceneCount) => - { - if (level == 0 && GameDataManager.GameData.isFirstPlay) + ShopLevelUpdate = Observable.CombineLatest( + heartObserver.DistinctUntilChanged(), + sceneCounter.DistinctUntilChanged().Delay(TimeSpan.FromSeconds(.4f)), + (heart, sceneCount) => { - return false; - } - var currentLevel = levelList.LastOrDefault(data => data.heart <= heart)?.shopLevel ?? 1; - return currentLevel > level && sceneCount == 1; - }) + var viewedLevel = GameDataManager.GameData.ViewedShopLevel; + if (viewedLevel == 0 && GameDataManager.GameData.isFirstPlay) + { + return false; + } + var currentLevel = levelList.LastOrDefault(data => data.heart <= heart)?.shopLevel ?? 1; + return currentLevel > viewedLevel && sceneCount == 1; + }) .DistinctUntilChanged() .Publish(false) .RefCount();