バックグラウンドでのミッション達成チェックを追加
This commit is contained in:
parent
dd1aeb7036
commit
14d0e2122b
|
|
@ -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();
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue