diff --git a/popcorn/Assets/MyGame/Scripts/GameDataObserver.cs b/popcorn/Assets/MyGame/Scripts/GameDataObserver.cs index 48900c57..e12f4da1 100644 --- a/popcorn/Assets/MyGame/Scripts/GameDataObserver.cs +++ b/popcorn/Assets/MyGame/Scripts/GameDataObserver.cs @@ -6,7 +6,7 @@ using UnityEngine; public class GameDataObserver : SingletonMonoBehaviour { - [SerializeField] private FloatReactiveProperty checkInterval = new FloatReactiveProperty(.1f); + [SerializeField] private FloatReactiveProperty checkInterval = new FloatReactiveProperty(.2f); private readonly Subject heartObserver = new Subject(); private readonly Subject sceneCounter = new Subject(); private readonly Subject shopLevelObserver = new Subject(); @@ -19,6 +19,7 @@ public class GameDataObserver : SingletonMonoBehaviour private readonly Subject addRareSalesObserver = new Subject(); private readonly Subject hasRecipeObserver = new Subject(); private readonly Subject deliveredBulkOrderObserver = new Subject(); + private readonly Subject updateMissionProgress = new Subject(); private readonly BoolReactiveProperty updateMissionAchieved = new BoolReactiveProperty(); public IReadOnlyReactiveProperty UpdateMissionAchieved => updateMissionAchieved; @@ -30,22 +31,24 @@ public class GameDataObserver : SingletonMonoBehaviour updateMissionAchieved.AddTo(this); var levelList = SpreadsheetDataManager.Instance.GetBaseDataList(Const.ShopLevelDataSheet); levelList = levelList.Where(data => data.shopLevel != Const.SpecialShopLevel).ToList(); - 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); + 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); ShopLevelUpdate = Observable.CombineLatest( heartObserver.DistinctUntilChanged(), @@ -79,13 +82,32 @@ public class GameDataObserver : SingletonMonoBehaviour // 店舗レベルアップorミッション達成でリスト更新して達成チェック Observable.Merge( shopLevelObserver.DistinctUntilChanged(), - achievedMissionObserver.DistinctUntilChanged()) + achievedMissionObserver.DistinctUntilChanged(), + updateMissionProgress.Select(_ => 0)) .Subscribe(_ => { latestMissionList = GetLatestMissionList(); // ここで達成を再確認 updateMissionAchieved.Value = latestMissionList .Any(data => data.count <= MissionManager.GetProgressValue(data)); + if (latestMissionList.FirstOrDefault( + data => data.count <= MissionManager.GetProgressValue(data)) is MissionData debugMissionData) + { + Debug.Log($@"update normal:{debugMissionData.text} {MissionManager.GetProgressValue(debugMissionData)}/{debugMissionData.count}"); + } + else + { + Debug.Log($"normal no progress"); + } + + // dailyMission + var ids = GameDataManager.GameData.dailyMissionIdArray.Except(GameDataManager.GameData.dailyMissionAchievedIdArray); + if (missionList + .Where(data => ids.Contains(data.id)) + .Any(missionData => missionData.count <= MissionManager.GetDailyProgressValue(missionData))) + { + updateMissionAchieved.Value = true; + } // CheckDailyCompleteMission if (!GameDataManager.GameData.dailyMissionCompleted) @@ -189,4 +211,8 @@ public class GameDataObserver : SingletonMonoBehaviour GameDataManager.SaveGameData(); }); } + + public void CheckMissionProgress(){ + updateMissionProgress.OnNext(Unit.Default); + } } diff --git a/popcorn/Assets/MyGame/Scripts/HeaderManager.cs b/popcorn/Assets/MyGame/Scripts/HeaderManager.cs index a53243ac..1f59c650 100644 --- a/popcorn/Assets/MyGame/Scripts/HeaderManager.cs +++ b/popcorn/Assets/MyGame/Scripts/HeaderManager.cs @@ -26,6 +26,7 @@ public class HeaderManager : MonoBehaviour MissionManager.ShowDialog(() => { isOpenMission = false; + GameDataObserver.Instance.CheckMissionProgress(); missionIndicator.SetActive(GameDataObserver.Instance.UpdateMissionAchieved.Value); }, active => missionIndicator.SetActive(active));