From 14d0e2122b629bbb3770a5971a3cd906a58d3721 Mon Sep 17 00:00:00 2001 From: kimura Date: Fri, 29 Oct 2021 10:31:18 +0900 Subject: [PATCH] =?UTF-8?q?=E3=83=90=E3=83=83=E3=82=AF=E3=82=B0=E3=83=A9?= =?UTF-8?q?=E3=82=A6=E3=83=B3=E3=83=89=E3=81=A7=E3=81=AE=E3=83=9F=E3=83=83?= =?UTF-8?q?=E3=82=B7=E3=83=A7=E3=83=B3=E9=81=94=E6=88=90=E3=83=81=E3=82=A7?= =?UTF-8?q?=E3=83=83=E3=82=AF=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 | 80 ++++++++++++++++++- 1 file changed, 79 insertions(+), 1 deletion(-) diff --git a/popcorn/Assets/MyGame/Scripts/GameDataObserver.cs b/popcorn/Assets/MyGame/Scripts/GameDataObserver.cs index f9333b80..c39389db 100644 --- a/popcorn/Assets/MyGame/Scripts/GameDataObserver.cs +++ b/popcorn/Assets/MyGame/Scripts/GameDataObserver.cs @@ -65,6 +65,85 @@ public class GameDataObserver : SingletonMonoBehaviour #if UNITY_EDITOR // ShopLevelUpdate.Subscribe(x => { Debug.Log($"change:{x}"); }); #endif + + // ミッション達成チェッカー + var missionList = SpreadsheetDataManager.Instance.GetBaseDataList(Const.MissionDataSheet); + var normalMissionList = missionList.Where(data => data.Category == MissionCategory.Normal).ToList(); + var latestMissionList = GetLatestMissionList(); + // 各条件の最前の未達成のミッションのみにフィルタ + List GetLatestMissionList() => normalMissionList + .Where(data => data.shopLevel <= GameDataManager.GameData.ViewedShopLevel) + .Where(data => !GameDataManager.GameData.AchievedMission.Contains(data.id)) + .GroupBy(data => data.Condition, (_, list) => list.FirstOrDefault()).ToList(); + // 店舗レベルアップorミッション達成でリスト更新して達成チェック + Observable.Merge( + shopLevelObserver.DistinctUntilChanged(), + achievedMissionObserver.DistinctUntilChanged()) + .Subscribe(_ => + { + latestMissionList = GetLatestMissionList(); + // ここで達成を再確認 + updateMissionAchieved.Value = latestMissionList + .Any(data => data.count <= MissionManager.GetProgressValue(data)); + + // CheckDailyCompleteMission + if (!GameDataManager.GameData.dailyMissionCompleted) + { + if (GameDataManager.GameData.dailyMissionIdArray.Length <= GameDataManager.GameData.dailyMissionAchievedIdArray.Length) + { + updateMissionAchieved.Value = true; + } + } + }); + + // 各種ポップコーン以外の達成を確認 + Observable.Merge( + subCoinObserver.DistinctUntilChanged().Select(_ => MissionCondition.CoinConsumeCount), + addCornObserver.DistinctUntilChanged().Select(_ => MissionCondition.CornCount), + addCustomerObserver.DistinctUntilChanged().Select(_ => MissionCondition.CustomerCount), + hasRecipeObserver.DistinctUntilChanged().Select(_ => MissionCondition.RecipeCount), + deliveredBulkOrderObserver.DistinctUntilChanged().Select(_ => MissionCondition.BulkOrderDeliveredCount)) + .Subscribe(condition => + { + if (latestMissionList + .Where(data => data.Condition == condition) + .Any(data => data.count <= MissionManager.GetProgressValue(data))) + { + updateMissionAchieved.Value = true; + } + + // 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; + } + }); + + // ポップコーン達成確認 + Observable.Merge( + addSalesObserver.DistinctUntilChanged(), + addRareSalesObserver.DistinctUntilChanged()) + .Subscribe(_ => + { + if (latestMissionList + .Any(data => data.count <= MissionManager.GetProgressValue(data))) + { + updateMissionAchieved.Value = true; + } + + // 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; + } + }); + // デイリーミッション日付チェック sceneCounter .Where(x => x <= 1) @@ -99,7 +178,6 @@ public class GameDataObserver : SingletonMonoBehaviour gameData.dailyMissionCompleted = false; gameData.ResetDailyTotalCount(); // 新ミッション登録 - var missionList = SpreadsheetDataManager.Instance.GetBaseDataList(Const.MissionDataSheet); var targetList = missionList.Where(data => data.Category == MissionCategory.Daily && data.shopLevel <= gameData.ViewedShopLevel); gameData.dailyMissionIdArray = targetList.ToList().RandomChoose(3).Select(data => data.id).ToArray();