From 4869c55956c28d8619b98491fb2cb91686a35499 Mon Sep 17 00:00:00 2001 From: kimura Date: Mon, 15 Nov 2021 20:39:03 +0900 Subject: [PATCH] =?UTF-8?q?=E9=80=9A=E7=9F=A5=E7=94=A8=E3=83=9F=E3=83=83?= =?UTF-8?q?=E3=82=B7=E3=83=A7=E3=83=B3=E3=81=AE=E9=81=94=E6=88=90=E3=83=81?= =?UTF-8?q?=E3=82=A7=E3=83=83=E3=82=AF=E6=99=82=E3=81=AB=E3=83=87=E3=82=A4?= =?UTF-8?q?=E3=83=AA=E3=83=BC=E3=83=9F=E3=83=83=E3=82=B7=E3=83=A7=E3=83=B3?= =?UTF-8?q?=E9=81=94=E6=88=90=E5=BE=8C=E3=81=AB=E6=9B=B4=E6=96=B0=E3=81=8C?= =?UTF-8?q?=E8=B5=B0=E3=81=A3=E3=81=A6=E3=81=84=E3=81=AA=E3=81=8B=E3=81=A3?= =?UTF-8?q?=E3=81=9F=E3=81=AE=E3=82=92=E8=A7=A3=E6=B6=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Assets/MyGame/Scripts/GameDataObserver.cs | 62 +++++++++++++------ .../Assets/MyGame/Scripts/HeaderManager.cs | 1 + 2 files changed, 45 insertions(+), 18 deletions(-) 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));