バックグラウンドでのミッション達成チェックを追加

This commit is contained in:
kimura 2021-10-29 10:31:18 +09:00
parent dd1aeb7036
commit 14d0e2122b
1 changed files with 79 additions and 1 deletions

View File

@ -65,6 +65,85 @@ public class GameDataObserver : SingletonMonoBehaviour<GameDataObserver>
#if UNITY_EDITOR #if UNITY_EDITOR
// ShopLevelUpdate.Subscribe(x => { Debug.Log($"change:{x}"); }); // ShopLevelUpdate.Subscribe(x => { Debug.Log($"change:{x}"); });
#endif #endif
// ミッション達成チェッカー
var missionList = SpreadsheetDataManager.Instance.GetBaseDataList<MissionData>(Const.MissionDataSheet);
var normalMissionList = missionList.Where(data => data.Category == MissionCategory.Normal).ToList();
var latestMissionList = GetLatestMissionList();
// 各条件の最前の未達成のミッションのみにフィルタ
List<MissionData> 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 sceneCounter
.Where(x => x <= 1) .Where(x => x <= 1)
@ -99,7 +178,6 @@ public class GameDataObserver : SingletonMonoBehaviour<GameDataObserver>
gameData.dailyMissionCompleted = false; gameData.dailyMissionCompleted = false;
gameData.ResetDailyTotalCount(); gameData.ResetDailyTotalCount();
// 新ミッション登録 // 新ミッション登録
var missionList = SpreadsheetDataManager.Instance.GetBaseDataList<MissionData>(Const.MissionDataSheet);
var targetList = missionList.Where(data => var targetList = missionList.Where(data =>
data.Category == MissionCategory.Daily && data.shopLevel <= gameData.ViewedShopLevel); data.Category == MissionCategory.Daily && data.shopLevel <= gameData.ViewedShopLevel);
gameData.dailyMissionIdArray = targetList.ToList().RandomChoose(3).Select(data => data.id).ToArray(); gameData.dailyMissionIdArray = targetList.ToList().RandomChoose(3).Select(data => data.id).ToArray();