From a6125c289d7d6daac733890f32ff7e0edff7477f Mon Sep 17 00:00:00 2001 From: kimura Date: Tue, 6 Dec 2022 15:26:09 +0900 Subject: [PATCH] =?UTF-8?q?=E5=85=B1=E9=80=9A=E3=83=9F=E3=83=83=E3=82=B7?= =?UTF-8?q?=E3=83=A7=E3=83=B3=E5=91=A8=E3=82=8A=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Scenes/Main/Scripts/MissionManager.cs | 323 +---------------- .../Scenes/Main/Scripts/MissionUtils.cs | 340 ++++++++++++++++++ .../Scenes/Main/Scripts/MissionUtils.cs.meta | 3 + .../Assets/MyGame/Scripts/GameDataObserver.cs | 24 +- .../Assets/MyGame/Scripts/HeaderManager.cs | 2 +- 5 files changed, 365 insertions(+), 327 deletions(-) create mode 100644 popcorn/Assets/MyGame/Scenes/Main/Scripts/MissionUtils.cs create mode 100644 popcorn/Assets/MyGame/Scenes/Main/Scripts/MissionUtils.cs.meta diff --git a/popcorn/Assets/MyGame/Scenes/Main/Scripts/MissionManager.cs b/popcorn/Assets/MyGame/Scenes/Main/Scripts/MissionManager.cs index bdc65a15..b358a0e5 100644 --- a/popcorn/Assets/MyGame/Scenes/Main/Scripts/MissionManager.cs +++ b/popcorn/Assets/MyGame/Scenes/Main/Scripts/MissionManager.cs @@ -2,6 +2,7 @@ using System; using System.Collections.Generic; using System.Linq; using I2.Loc; +using MyGame.Scenes.Main.Scripts; using MyGame.Scripts; using UniRx; using UnityEngine; @@ -69,7 +70,7 @@ public class MissionManager : MonoBehaviour // ミッション読み込み var missionList = SpreadsheetDataManager.Instance.GetBaseDataList(Const.MissionDataSheet); - GenerateNormalMission(missionList); + GenerateNormalMission(); // dailyMission // コンプリートミッション @@ -116,7 +117,7 @@ public class MissionManager : MonoBehaviour foreach (var missionData in missionList.Where(data => globalGameData.dailyMissionIdArray.Contains(data.id))) { var missionView = listView.AddItemView(missionData); - var progressValue = GetDailyProgressValue(missionData); + var progressValue = MissionUtils.GetDailyProgressValue(missionData); missionView.SetData(missionData, progressValue); missionView.SetButtonActive(missionData.count <= progressValue); if (globalGameData.dailyMissionAchievedIdArray.Contains(missionData.id)) // 達成済み @@ -157,28 +158,22 @@ public class MissionManager : MonoBehaviour listView.SetIndicator(MissionCategory.Daily, dailyIndicateFlag > 0); } - private void GenerateNormalMission(List missionList) + private void GenerateNormalMission() { // ミッション表示 normalIndicateFlag = 0; - var latestMissionList = missionList - .Where(data => data.Category == MissionCategory.Normal && data.shopLevel <= globalGameData.ViewedShopLevel) - .GroupBy(data => data.Condition, (cond, list) => - { - return list.FirstOrDefault(data => !cityGameData.AchievedMission.Contains(data.id)) ?? list.Last(); - }); - latestMissionList = latestMissionList.Where(data => CheckAvailableMission(data, globalGameData.MyRecipes)); + var latestMissionList = MissionUtils.GetLatestNormalMissions(true); // 達成済み未獲得,進行中,すべて達成の順にミッションを並べ替え latestMissionList = latestMissionList.OrderByDescending(data => data.RewardType == MissionRewardType.ShopCustomizeCoin); - latestMissionList = latestMissionList.OrderByDescending(data => data.count <= GetProgressValue(data)); - latestMissionList = latestMissionList.OrderBy(data => cityGameData.AchievedMission.Contains(data.id)); + latestMissionList = latestMissionList.OrderByDescending(data => data.count <= MissionUtils.GetProgressValue(data)); + latestMissionList = latestMissionList.OrderBy(MissionUtils.IsAchievedMission); foreach (var missionData in latestMissionList) { var missionView = listView.AddItemView(missionData); - var progressValue = GetProgressValue(missionData); + var progressValue = MissionUtils.GetProgressValue(missionData); missionView.SetData(missionData, progressValue); missionView.SetButtonActive(missionData.count <= progressValue); - if (cityGameData.AchievedMission.Contains(missionData.id)) // 達成済み + if (MissionUtils.IsAchievedMission(missionData)) // 達成済み { missionView.SetRewarded(); } @@ -195,12 +190,11 @@ public class MissionManager : MonoBehaviour LocalCacheManager.Save(MissionDataTag, (missionData, new Action(() => { GetReward(missionData); - // 達成ID保存 - cityGameData.AchievedMission.Add(missionData.id); + AddAchievedList(missionData); GameDataManager.SaveGameData(); listView.ResetItemList(MissionCategory.Normal); // 通常ミッションリスト更新 - GenerateNormalMission(missionList); + GenerateNormalMission(); onAchieved?.Invoke(normalIndicateFlag + dailyIndicateFlag > 0); }))); TransitionManager.Instance.LoadSceneAdditive(GameScenes.MissionAchievement); @@ -209,6 +203,8 @@ public class MissionManager : MonoBehaviour listView.SetIndicator(MissionCategory.Normal, normalIndicateFlag > 0); } + private void AddAchievedList(MissionData missionData) => (MissionUtils.IsGlobalMission(missionData) ? globalGameData : cityGameData).AchievedMission.Add(missionData.id); + private string GetTimeLimitText(TimeSpan limitTime) { if (limitTime.TotalSeconds < 0) limitTime = TimeSpan.Zero; @@ -222,299 +218,6 @@ public class MissionManager : MonoBehaviour TransitionManager.Instance.LoadSceneAdditive(GameScenes.Mission); } - public static bool CheckAvailableMission(MissionData missionData, int[] myRecipe) - { - // 購入レシピなど所持判定 - // ここ、今後追加メンテがだるいのでシートかScriptableObjectに逃したい - // 自動生成とか理想だけどenum不使用でもいい - switch (missionData.Condition) - { - case MissionCondition.NoriSoysourceSalesCount: - return myRecipe.Contains(20); - case MissionCondition.RareNoriSoysourceSalesCount: - return myRecipe.Contains(20); - case MissionCondition.SaltButterSalesCount: - return myRecipe.Contains(21); - case MissionCondition.RareSaltButterSalesCount: - return myRecipe.Contains(21); - case MissionCondition.StrawberryMilkSalesCount: - return myRecipe.Contains(22); - case MissionCondition.RareStrawberryMilkSalesCount: - return myRecipe.Contains(22); - case MissionCondition.SaltChocolateSalesCount: - return myRecipe.Contains(23); - case MissionCondition.RareSaltChocolateSalesCount: - return myRecipe.Contains(23); - case MissionCondition.ChocolateGreenteaSalesCount: - return myRecipe.Contains(24); - case MissionCondition.RareChocolateGreenteaSalesCount: - return myRecipe.Contains(24); - default: - return true; - } - } - - public static int GetProgressValue(MissionData missionData) - { - var globalGameData = GameDataManager.GameData; - var cityGameData = GameDataManager.GetCurrentCityGameData(); - switch (missionData.Condition) - { - case MissionCondition.CornCount: - return cityGameData.TotalAddCornSeed; - case MissionCondition.CustomerCount: // タップor来客した数 - return cityGameData.TotalCustomerCount; - case MissionCondition.SalesCount: // 売った数 - return cityGameData.TotalSales; - case MissionCondition.RareSalesCount: // レアを売った数 - return cityGameData.RareTotalSales; - case MissionCondition.RecipeCount: // レシピの数 - return globalGameData.MyRecipes.Length; - case MissionCondition.CoinConsumeCount: // コイン消費数 - return cityGameData.TotalSubCoin; - case MissionCondition.BulkOrderDeliveredCount: - return cityGameData.BulkOrderDeliveredCount; - case MissionCondition.SaltSalesCount: - return cityGameData.GetTotalSalesByFlavor(1); - case MissionCondition.RareSaltSalesCount: - return cityGameData.GetTotalSalesByFlavorWithRare(1); - case MissionCondition.CaramelSalesCount: - return cityGameData.GetTotalSalesByFlavor(2); - case MissionCondition.RareCaramelSalesCount: - return cityGameData.GetTotalSalesByFlavorWithRare(2); - case MissionCondition.PepperSalesCount: - return cityGameData.GetTotalSalesByFlavor(3); - case MissionCondition.RarePepperSalesCount: - return cityGameData.GetTotalSalesByFlavorWithRare(3); - case MissionCondition.HoneySalesCount: - return cityGameData.GetTotalSalesByFlavor(4); - case MissionCondition.RareHoneySalesCount: - return cityGameData.GetTotalSalesByFlavorWithRare(4); - case MissionCondition.CheeseSalesCount: - return cityGameData.GetTotalSalesByFlavor(5); - case MissionCondition.RareCheeseSalesCount: - return cityGameData.GetTotalSalesByFlavorWithRare(5); - case MissionCondition.SoysourceSalesCount: - return cityGameData.GetTotalSalesByFlavor(6); - case MissionCondition.RareSoysourceSalesCount: - return cityGameData.GetTotalSalesByFlavorWithRare(6); - case MissionCondition.StrawberrySalesCount: - return cityGameData.GetTotalSalesByFlavor(7); - case MissionCondition.RareStrawberrySalesCount: - return cityGameData.GetTotalSalesByFlavorWithRare(7); - case MissionCondition.GreenteaSalesCount: - return cityGameData.GetTotalSalesByFlavor(8); - case MissionCondition.RareGreenteaSalesCount: - return cityGameData.GetTotalSalesByFlavorWithRare(8); - case MissionCondition.ChocolateSalesCount: - return cityGameData.GetTotalSalesByFlavor(9); - case MissionCondition.RareChocolateSalesCount: - return cityGameData.GetTotalSalesByFlavorWithRare(9); - case MissionCondition.NoriSaltSalesCount: - return cityGameData.GetTotalSalesByFlavor(10); - case MissionCondition.RareNoriSaltSalesCount: - return cityGameData.GetTotalSalesByFlavorWithRare(10); - case MissionCondition.ButterSoysourceSalesCount: - return cityGameData.GetTotalSalesByFlavor(11); - case MissionCondition.RareButterSoysourceSalesCount: - return cityGameData.GetTotalSalesByFlavorWithRare(11); - case MissionCondition.PepperCheeseSalesCount: - return cityGameData.GetTotalSalesByFlavor(12); - case MissionCondition.RarePepperCheeseSalesCount: - return cityGameData.GetTotalSalesByFlavorWithRare(12); - case MissionCondition.SaltCaramelSalesCount: - return cityGameData.GetTotalSalesByFlavor(13); - case MissionCondition.RareSaltCaramelSalesCount: - return cityGameData.GetTotalSalesByFlavorWithRare(13); - case MissionCondition.NoriButterSalesCount: - return cityGameData.GetTotalSalesByFlavor(14); - case MissionCondition.RareNoriButterSalesCount: - return cityGameData.GetTotalSalesByFlavorWithRare(14); - case MissionCondition.MilkChocolateSalesCount: - return cityGameData.GetTotalSalesByFlavor(15); - case MissionCondition.RareMilkChocolateSalesCount: - return cityGameData.GetTotalSalesByFlavorWithRare(15); - case MissionCondition.CaramelCheeseSalesCount: - return cityGameData.GetTotalSalesByFlavor(16); - case MissionCondition.RareCaramelCheeseSalesCount: - return cityGameData.GetTotalSalesByFlavorWithRare(16); - case MissionCondition.HoneyButterSalesCount: - return cityGameData.GetTotalSalesByFlavor(17); - case MissionCondition.RareHoneyButterSalesCount: - return cityGameData.GetTotalSalesByFlavorWithRare(17); - case MissionCondition.GreenteaMilkSalesCount: - return cityGameData.GetTotalSalesByFlavor(18); - case MissionCondition.RareGreenteaMilkSalesCount: - return cityGameData.GetTotalSalesByFlavorWithRare(18); - case MissionCondition.StrawberryChocolaSalesCount: - return cityGameData.GetTotalSalesByFlavor(19); - case MissionCondition.RareStrawberryChocolateSalesCount: - return cityGameData.GetTotalSalesByFlavorWithRare(19); - case MissionCondition.NoriSoysourceSalesCount: - return cityGameData.GetTotalSalesByFlavor(20); - case MissionCondition.RareNoriSoysourceSalesCount: - return cityGameData.GetTotalSalesByFlavorWithRare(20); - case MissionCondition.SaltButterSalesCount: - return cityGameData.GetTotalSalesByFlavor(21); - case MissionCondition.RareSaltButterSalesCount: - return cityGameData.GetTotalSalesByFlavorWithRare(21); - case MissionCondition.StrawberryMilkSalesCount: - return cityGameData.GetTotalSalesByFlavor(22); - case MissionCondition.RareStrawberryMilkSalesCount: - return cityGameData.GetTotalSalesByFlavorWithRare(22); - case MissionCondition.SaltChocolateSalesCount: - return cityGameData.GetTotalSalesByFlavor(23); - case MissionCondition.RareSaltChocolateSalesCount: - return cityGameData.GetTotalSalesByFlavorWithRare(23); - case MissionCondition.ChocolateGreenteaSalesCount: - return cityGameData.GetTotalSalesByFlavor(24); - case MissionCondition.RareChocolateGreenteaSalesCount: - return cityGameData.GetTotalSalesByFlavorWithRare(24); - case MissionCondition.WatchVideo: - return cityGameData.adCount; - case MissionCondition.VipCustomer: - return cityGameData.TotalVipCustomer; - case MissionCondition.UseFertilizer: - return cityGameData.TotalUseFertiliser; - case MissionCondition.UseAdWalker: - return cityGameData.TotalUseAdWalker; - case MissionCondition.UseAutoCook: - return cityGameData.TotalUseAutoCook; - default: - return 0; - } - } - - public static int GetDailyProgressValue(MissionData missionData) - { - var globalGameData = GameDataManager.GameData; - switch (missionData.Condition) - { - case MissionCondition.CornCount: - return globalGameData.DailyTotalAddCornSeed; - case MissionCondition.CustomerCount: // タップor来客した数 - return globalGameData.DailyTotalCustomerCount; - case MissionCondition.SalesCount: // 売った数 - return globalGameData.DailyTotalSales; - case MissionCondition.RareSalesCount: // レアを売った数 - return globalGameData.DailyRareTotalSales; - case MissionCondition.RecipeCount: // レシピの数 - return globalGameData.DailyRecipeGetCount; - case MissionCondition.CoinConsumeCount: // コイン消費数 - return globalGameData.DailyTotalSubCoin; - case MissionCondition.BulkOrderDeliveredCount: - return globalGameData.DailyBulkOrderDeliveredCount; - case MissionCondition.SaltSalesCount: - return globalGameData.GetDailyTotalSalesByFlavor(1); - case MissionCondition.RareSaltSalesCount: - return globalGameData.GetDailyTotalSalesByFlavorWithRare(1); - case MissionCondition.CaramelSalesCount: - return globalGameData.GetDailyTotalSalesByFlavor(2); - case MissionCondition.RareCaramelSalesCount: - return globalGameData.GetDailyTotalSalesByFlavorWithRare(2); - case MissionCondition.PepperSalesCount: - return globalGameData.GetDailyTotalSalesByFlavor(3); - case MissionCondition.RarePepperSalesCount: - return globalGameData.GetDailyTotalSalesByFlavorWithRare(3); - case MissionCondition.HoneySalesCount: - return globalGameData.GetDailyTotalSalesByFlavor(4); - case MissionCondition.RareHoneySalesCount: - return globalGameData.GetDailyTotalSalesByFlavorWithRare(4); - case MissionCondition.CheeseSalesCount: - return globalGameData.GetDailyTotalSalesByFlavor(5); - case MissionCondition.RareCheeseSalesCount: - return globalGameData.GetDailyTotalSalesByFlavorWithRare(5); - case MissionCondition.SoysourceSalesCount: - return globalGameData.GetDailyTotalSalesByFlavor(6); - case MissionCondition.RareSoysourceSalesCount: - return globalGameData.GetDailyTotalSalesByFlavorWithRare(6); - case MissionCondition.StrawberrySalesCount: - return globalGameData.GetDailyTotalSalesByFlavor(7); - case MissionCondition.RareStrawberrySalesCount: - return globalGameData.GetDailyTotalSalesByFlavorWithRare(7); - case MissionCondition.GreenteaSalesCount: - return globalGameData.GetDailyTotalSalesByFlavor(8); - case MissionCondition.RareGreenteaSalesCount: - return globalGameData.GetDailyTotalSalesByFlavorWithRare(8); - case MissionCondition.ChocolateSalesCount: - return globalGameData.GetDailyTotalSalesByFlavor(9); - case MissionCondition.RareChocolateSalesCount: - return globalGameData.GetDailyTotalSalesByFlavorWithRare(9); - case MissionCondition.NoriSaltSalesCount: - return globalGameData.GetDailyTotalSalesByFlavor(10); - case MissionCondition.RareNoriSaltSalesCount: - return globalGameData.GetDailyTotalSalesByFlavorWithRare(10); - case MissionCondition.ButterSoysourceSalesCount: - return globalGameData.GetDailyTotalSalesByFlavor(11); - case MissionCondition.RareButterSoysourceSalesCount: - return globalGameData.GetDailyTotalSalesByFlavorWithRare(11); - case MissionCondition.PepperCheeseSalesCount: - return globalGameData.GetDailyTotalSalesByFlavor(12); - case MissionCondition.RarePepperCheeseSalesCount: - return globalGameData.GetDailyTotalSalesByFlavorWithRare(12); - case MissionCondition.SaltCaramelSalesCount: - return globalGameData.GetDailyTotalSalesByFlavor(13); - case MissionCondition.RareSaltCaramelSalesCount: - return globalGameData.GetDailyTotalSalesByFlavorWithRare(13); - case MissionCondition.NoriButterSalesCount: - return globalGameData.GetDailyTotalSalesByFlavor(14); - case MissionCondition.RareNoriButterSalesCount: - return globalGameData.GetDailyTotalSalesByFlavorWithRare(14); - case MissionCondition.MilkChocolateSalesCount: - return globalGameData.GetDailyTotalSalesByFlavor(15); - case MissionCondition.RareMilkChocolateSalesCount: - return globalGameData.GetDailyTotalSalesByFlavorWithRare(15); - case MissionCondition.CaramelCheeseSalesCount: - return globalGameData.GetDailyTotalSalesByFlavor(16); - case MissionCondition.RareCaramelCheeseSalesCount: - return globalGameData.GetDailyTotalSalesByFlavorWithRare(16); - case MissionCondition.HoneyButterSalesCount: - return globalGameData.GetDailyTotalSalesByFlavor(17); - case MissionCondition.RareHoneyButterSalesCount: - return globalGameData.GetDailyTotalSalesByFlavorWithRare(17); - case MissionCondition.GreenteaMilkSalesCount: - return globalGameData.GetDailyTotalSalesByFlavor(18); - case MissionCondition.RareGreenteaMilkSalesCount: - return globalGameData.GetDailyTotalSalesByFlavorWithRare(18); - case MissionCondition.StrawberryChocolaSalesCount: - return globalGameData.GetDailyTotalSalesByFlavor(19); - case MissionCondition.RareStrawberryChocolateSalesCount: - return globalGameData.GetDailyTotalSalesByFlavorWithRare(19); - case MissionCondition.NoriSoysourceSalesCount: - return globalGameData.GetDailyTotalSalesByFlavor(20); - case MissionCondition.RareNoriSoysourceSalesCount: - return globalGameData.GetDailyTotalSalesByFlavorWithRare(20); - case MissionCondition.SaltButterSalesCount: - return globalGameData.GetDailyTotalSalesByFlavor(21); - case MissionCondition.RareSaltButterSalesCount: - return globalGameData.GetDailyTotalSalesByFlavorWithRare(21); - case MissionCondition.StrawberryMilkSalesCount: - return globalGameData.GetDailyTotalSalesByFlavor(22); - case MissionCondition.RareStrawberryMilkSalesCount: - return globalGameData.GetDailyTotalSalesByFlavorWithRare(22); - case MissionCondition.SaltChocolateSalesCount: - return globalGameData.GetDailyTotalSalesByFlavor(23); - case MissionCondition.RareSaltChocolateSalesCount: - return globalGameData.GetDailyTotalSalesByFlavorWithRare(23); - case MissionCondition.ChocolateGreenteaSalesCount: - return globalGameData.GetDailyTotalSalesByFlavor(24); - case MissionCondition.RareChocolateGreenteaSalesCount: - return globalGameData.GetDailyTotalSalesByFlavorWithRare(24); - case MissionCondition.WatchVideo: - return globalGameData.DailyWatchVideo; - case MissionCondition.VipCustomer: - return globalGameData.DailyVipCustomer; - case MissionCondition.UseFertilizer: - return globalGameData.DailyUseFertiliser; - case MissionCondition.UseAdWalker: - return globalGameData.DailyUseAdWalker; - case MissionCondition.UseAutoCook: - return globalGameData.DailyUseAutoCook; - default: - return 0; - } - } - private void GetReward(MissionData missionData) { switch (missionData.RewardType) diff --git a/popcorn/Assets/MyGame/Scenes/Main/Scripts/MissionUtils.cs b/popcorn/Assets/MyGame/Scenes/Main/Scripts/MissionUtils.cs new file mode 100644 index 00000000..b1fdd30c --- /dev/null +++ b/popcorn/Assets/MyGame/Scenes/Main/Scripts/MissionUtils.cs @@ -0,0 +1,340 @@ +using System.Collections.Generic; +using System.Linq; + +namespace MyGame.Scenes.Main.Scripts +{ + public class MissionUtils + { + /// + /// 現在の進行中ミッション一覧 + /// 各条件の最前の未達成のミッションのみにフィルタ + /// すべて達成した項目を残す場合 withLastAchievedを使う + /// + /// + /// + public static IEnumerable GetLatestNormalMissions(bool withLastAchieved = false) + { + var cityGameData = GameDataManager.GetCurrentCityGameData(); + var globalGameData = GameDataManager.GameData; + return SpreadsheetDataManager.Instance.GetBaseDataList(Const.MissionDataSheet) + .Where(data => data.Category == MissionCategory.Normal) + .Where(data => data.shopLevel <= cityGameData.ViewedShopLevel) + .Where(data => CheckAvailableMission(data, globalGameData.MyRecipes)) + .GroupBy(data => data.Condition, (_, enumerable) => + { + var missionData = enumerable.FirstOrDefault(data => + !(IsGlobalMission(data) ? globalGameData : cityGameData).AchievedMission.Contains(data.id)); + if (missionData is null && withLastAchieved) return enumerable.Last(); + return missionData; + }) + .Where(data => data is not null); + } + + public static bool IsGlobalMission(MissionData missionData) => + missionData.Condition switch + { + MissionCondition.RecipeCount => true, + _ => false + }; + + public static bool IsAchievedMission(MissionData missionData) + { + var cityGameData = GameDataManager.GetCurrentCityGameData(); + var globalGameData = GameDataManager.GameData; + return (IsGlobalMission(missionData) ? globalGameData : cityGameData).AchievedMission.Contains(missionData.id); + } + + public static bool CheckAvailableMission(MissionData missionData, int[] myRecipe) + { + // 購入レシピなど所持判定 + // ここ、今後追加メンテがだるいのでシートかScriptableObjectに逃したい + // 自動生成とか理想だけどenum不使用でもいい + switch (missionData.Condition) + { + case MissionCondition.NoriSoysourceSalesCount: + return myRecipe.Contains(20); + case MissionCondition.RareNoriSoysourceSalesCount: + return myRecipe.Contains(20); + case MissionCondition.SaltButterSalesCount: + return myRecipe.Contains(21); + case MissionCondition.RareSaltButterSalesCount: + return myRecipe.Contains(21); + case MissionCondition.StrawberryMilkSalesCount: + return myRecipe.Contains(22); + case MissionCondition.RareStrawberryMilkSalesCount: + return myRecipe.Contains(22); + case MissionCondition.SaltChocolateSalesCount: + return myRecipe.Contains(23); + case MissionCondition.RareSaltChocolateSalesCount: + return myRecipe.Contains(23); + case MissionCondition.ChocolateGreenteaSalesCount: + return myRecipe.Contains(24); + case MissionCondition.RareChocolateGreenteaSalesCount: + return myRecipe.Contains(24); + default: + return true; + } + } + + public static int GetProgressValue(MissionData missionData) + { + var globalGameData = GameDataManager.GameData; + var cityGameData = GameDataManager.GetCurrentCityGameData(); + switch (missionData.Condition) + { + case MissionCondition.CornCount: + return cityGameData.TotalAddCornSeed; + case MissionCondition.CustomerCount: // タップor来客した数 + return cityGameData.TotalCustomerCount; + case MissionCondition.SalesCount: // 売った数 + return cityGameData.TotalSales; + case MissionCondition.RareSalesCount: // レアを売った数 + return cityGameData.RareTotalSales; + case MissionCondition.RecipeCount: // レシピの数 + return globalGameData.MyRecipes.Length; + case MissionCondition.CoinConsumeCount: // コイン消費数 + return cityGameData.TotalSubCoin; + case MissionCondition.BulkOrderDeliveredCount: + return cityGameData.BulkOrderDeliveredCount; + case MissionCondition.SaltSalesCount: + return cityGameData.GetTotalSalesByFlavor(1); + case MissionCondition.RareSaltSalesCount: + return cityGameData.GetTotalSalesByFlavorWithRare(1); + case MissionCondition.CaramelSalesCount: + return cityGameData.GetTotalSalesByFlavor(2); + case MissionCondition.RareCaramelSalesCount: + return cityGameData.GetTotalSalesByFlavorWithRare(2); + case MissionCondition.PepperSalesCount: + return cityGameData.GetTotalSalesByFlavor(3); + case MissionCondition.RarePepperSalesCount: + return cityGameData.GetTotalSalesByFlavorWithRare(3); + case MissionCondition.HoneySalesCount: + return cityGameData.GetTotalSalesByFlavor(4); + case MissionCondition.RareHoneySalesCount: + return cityGameData.GetTotalSalesByFlavorWithRare(4); + case MissionCondition.CheeseSalesCount: + return cityGameData.GetTotalSalesByFlavor(5); + case MissionCondition.RareCheeseSalesCount: + return cityGameData.GetTotalSalesByFlavorWithRare(5); + case MissionCondition.SoysourceSalesCount: + return cityGameData.GetTotalSalesByFlavor(6); + case MissionCondition.RareSoysourceSalesCount: + return cityGameData.GetTotalSalesByFlavorWithRare(6); + case MissionCondition.StrawberrySalesCount: + return cityGameData.GetTotalSalesByFlavor(7); + case MissionCondition.RareStrawberrySalesCount: + return cityGameData.GetTotalSalesByFlavorWithRare(7); + case MissionCondition.GreenteaSalesCount: + return cityGameData.GetTotalSalesByFlavor(8); + case MissionCondition.RareGreenteaSalesCount: + return cityGameData.GetTotalSalesByFlavorWithRare(8); + case MissionCondition.ChocolateSalesCount: + return cityGameData.GetTotalSalesByFlavor(9); + case MissionCondition.RareChocolateSalesCount: + return cityGameData.GetTotalSalesByFlavorWithRare(9); + case MissionCondition.NoriSaltSalesCount: + return cityGameData.GetTotalSalesByFlavor(10); + case MissionCondition.RareNoriSaltSalesCount: + return cityGameData.GetTotalSalesByFlavorWithRare(10); + case MissionCondition.ButterSoysourceSalesCount: + return cityGameData.GetTotalSalesByFlavor(11); + case MissionCondition.RareButterSoysourceSalesCount: + return cityGameData.GetTotalSalesByFlavorWithRare(11); + case MissionCondition.PepperCheeseSalesCount: + return cityGameData.GetTotalSalesByFlavor(12); + case MissionCondition.RarePepperCheeseSalesCount: + return cityGameData.GetTotalSalesByFlavorWithRare(12); + case MissionCondition.SaltCaramelSalesCount: + return cityGameData.GetTotalSalesByFlavor(13); + case MissionCondition.RareSaltCaramelSalesCount: + return cityGameData.GetTotalSalesByFlavorWithRare(13); + case MissionCondition.NoriButterSalesCount: + return cityGameData.GetTotalSalesByFlavor(14); + case MissionCondition.RareNoriButterSalesCount: + return cityGameData.GetTotalSalesByFlavorWithRare(14); + case MissionCondition.MilkChocolateSalesCount: + return cityGameData.GetTotalSalesByFlavor(15); + case MissionCondition.RareMilkChocolateSalesCount: + return cityGameData.GetTotalSalesByFlavorWithRare(15); + case MissionCondition.CaramelCheeseSalesCount: + return cityGameData.GetTotalSalesByFlavor(16); + case MissionCondition.RareCaramelCheeseSalesCount: + return cityGameData.GetTotalSalesByFlavorWithRare(16); + case MissionCondition.HoneyButterSalesCount: + return cityGameData.GetTotalSalesByFlavor(17); + case MissionCondition.RareHoneyButterSalesCount: + return cityGameData.GetTotalSalesByFlavorWithRare(17); + case MissionCondition.GreenteaMilkSalesCount: + return cityGameData.GetTotalSalesByFlavor(18); + case MissionCondition.RareGreenteaMilkSalesCount: + return cityGameData.GetTotalSalesByFlavorWithRare(18); + case MissionCondition.StrawberryChocolaSalesCount: + return cityGameData.GetTotalSalesByFlavor(19); + case MissionCondition.RareStrawberryChocolateSalesCount: + return cityGameData.GetTotalSalesByFlavorWithRare(19); + case MissionCondition.NoriSoysourceSalesCount: + return cityGameData.GetTotalSalesByFlavor(20); + case MissionCondition.RareNoriSoysourceSalesCount: + return cityGameData.GetTotalSalesByFlavorWithRare(20); + case MissionCondition.SaltButterSalesCount: + return cityGameData.GetTotalSalesByFlavor(21); + case MissionCondition.RareSaltButterSalesCount: + return cityGameData.GetTotalSalesByFlavorWithRare(21); + case MissionCondition.StrawberryMilkSalesCount: + return cityGameData.GetTotalSalesByFlavor(22); + case MissionCondition.RareStrawberryMilkSalesCount: + return cityGameData.GetTotalSalesByFlavorWithRare(22); + case MissionCondition.SaltChocolateSalesCount: + return cityGameData.GetTotalSalesByFlavor(23); + case MissionCondition.RareSaltChocolateSalesCount: + return cityGameData.GetTotalSalesByFlavorWithRare(23); + case MissionCondition.ChocolateGreenteaSalesCount: + return cityGameData.GetTotalSalesByFlavor(24); + case MissionCondition.RareChocolateGreenteaSalesCount: + return cityGameData.GetTotalSalesByFlavorWithRare(24); + case MissionCondition.WatchVideo: + return cityGameData.adCount; + case MissionCondition.VipCustomer: + return cityGameData.TotalVipCustomer; + case MissionCondition.UseFertilizer: + return cityGameData.TotalUseFertiliser; + case MissionCondition.UseAdWalker: + return cityGameData.TotalUseAdWalker; + case MissionCondition.UseAutoCook: + return cityGameData.TotalUseAutoCook; + default: + return 0; + } + } + + public static int GetDailyProgressValue(MissionData missionData) + { + var globalGameData = GameDataManager.GameData; + switch (missionData.Condition) + { + case MissionCondition.CornCount: + return globalGameData.DailyTotalAddCornSeed; + case MissionCondition.CustomerCount: // タップor来客した数 + return globalGameData.DailyTotalCustomerCount; + case MissionCondition.SalesCount: // 売った数 + return globalGameData.DailyTotalSales; + case MissionCondition.RareSalesCount: // レアを売った数 + return globalGameData.DailyRareTotalSales; + case MissionCondition.RecipeCount: // レシピの数 + return globalGameData.DailyRecipeGetCount; + case MissionCondition.CoinConsumeCount: // コイン消費数 + return globalGameData.DailyTotalSubCoin; + case MissionCondition.BulkOrderDeliveredCount: + return globalGameData.DailyBulkOrderDeliveredCount; + case MissionCondition.SaltSalesCount: + return globalGameData.GetDailyTotalSalesByFlavor(1); + case MissionCondition.RareSaltSalesCount: + return globalGameData.GetDailyTotalSalesByFlavorWithRare(1); + case MissionCondition.CaramelSalesCount: + return globalGameData.GetDailyTotalSalesByFlavor(2); + case MissionCondition.RareCaramelSalesCount: + return globalGameData.GetDailyTotalSalesByFlavorWithRare(2); + case MissionCondition.PepperSalesCount: + return globalGameData.GetDailyTotalSalesByFlavor(3); + case MissionCondition.RarePepperSalesCount: + return globalGameData.GetDailyTotalSalesByFlavorWithRare(3); + case MissionCondition.HoneySalesCount: + return globalGameData.GetDailyTotalSalesByFlavor(4); + case MissionCondition.RareHoneySalesCount: + return globalGameData.GetDailyTotalSalesByFlavorWithRare(4); + case MissionCondition.CheeseSalesCount: + return globalGameData.GetDailyTotalSalesByFlavor(5); + case MissionCondition.RareCheeseSalesCount: + return globalGameData.GetDailyTotalSalesByFlavorWithRare(5); + case MissionCondition.SoysourceSalesCount: + return globalGameData.GetDailyTotalSalesByFlavor(6); + case MissionCondition.RareSoysourceSalesCount: + return globalGameData.GetDailyTotalSalesByFlavorWithRare(6); + case MissionCondition.StrawberrySalesCount: + return globalGameData.GetDailyTotalSalesByFlavor(7); + case MissionCondition.RareStrawberrySalesCount: + return globalGameData.GetDailyTotalSalesByFlavorWithRare(7); + case MissionCondition.GreenteaSalesCount: + return globalGameData.GetDailyTotalSalesByFlavor(8); + case MissionCondition.RareGreenteaSalesCount: + return globalGameData.GetDailyTotalSalesByFlavorWithRare(8); + case MissionCondition.ChocolateSalesCount: + return globalGameData.GetDailyTotalSalesByFlavor(9); + case MissionCondition.RareChocolateSalesCount: + return globalGameData.GetDailyTotalSalesByFlavorWithRare(9); + case MissionCondition.NoriSaltSalesCount: + return globalGameData.GetDailyTotalSalesByFlavor(10); + case MissionCondition.RareNoriSaltSalesCount: + return globalGameData.GetDailyTotalSalesByFlavorWithRare(10); + case MissionCondition.ButterSoysourceSalesCount: + return globalGameData.GetDailyTotalSalesByFlavor(11); + case MissionCondition.RareButterSoysourceSalesCount: + return globalGameData.GetDailyTotalSalesByFlavorWithRare(11); + case MissionCondition.PepperCheeseSalesCount: + return globalGameData.GetDailyTotalSalesByFlavor(12); + case MissionCondition.RarePepperCheeseSalesCount: + return globalGameData.GetDailyTotalSalesByFlavorWithRare(12); + case MissionCondition.SaltCaramelSalesCount: + return globalGameData.GetDailyTotalSalesByFlavor(13); + case MissionCondition.RareSaltCaramelSalesCount: + return globalGameData.GetDailyTotalSalesByFlavorWithRare(13); + case MissionCondition.NoriButterSalesCount: + return globalGameData.GetDailyTotalSalesByFlavor(14); + case MissionCondition.RareNoriButterSalesCount: + return globalGameData.GetDailyTotalSalesByFlavorWithRare(14); + case MissionCondition.MilkChocolateSalesCount: + return globalGameData.GetDailyTotalSalesByFlavor(15); + case MissionCondition.RareMilkChocolateSalesCount: + return globalGameData.GetDailyTotalSalesByFlavorWithRare(15); + case MissionCondition.CaramelCheeseSalesCount: + return globalGameData.GetDailyTotalSalesByFlavor(16); + case MissionCondition.RareCaramelCheeseSalesCount: + return globalGameData.GetDailyTotalSalesByFlavorWithRare(16); + case MissionCondition.HoneyButterSalesCount: + return globalGameData.GetDailyTotalSalesByFlavor(17); + case MissionCondition.RareHoneyButterSalesCount: + return globalGameData.GetDailyTotalSalesByFlavorWithRare(17); + case MissionCondition.GreenteaMilkSalesCount: + return globalGameData.GetDailyTotalSalesByFlavor(18); + case MissionCondition.RareGreenteaMilkSalesCount: + return globalGameData.GetDailyTotalSalesByFlavorWithRare(18); + case MissionCondition.StrawberryChocolaSalesCount: + return globalGameData.GetDailyTotalSalesByFlavor(19); + case MissionCondition.RareStrawberryChocolateSalesCount: + return globalGameData.GetDailyTotalSalesByFlavorWithRare(19); + case MissionCondition.NoriSoysourceSalesCount: + return globalGameData.GetDailyTotalSalesByFlavor(20); + case MissionCondition.RareNoriSoysourceSalesCount: + return globalGameData.GetDailyTotalSalesByFlavorWithRare(20); + case MissionCondition.SaltButterSalesCount: + return globalGameData.GetDailyTotalSalesByFlavor(21); + case MissionCondition.RareSaltButterSalesCount: + return globalGameData.GetDailyTotalSalesByFlavorWithRare(21); + case MissionCondition.StrawberryMilkSalesCount: + return globalGameData.GetDailyTotalSalesByFlavor(22); + case MissionCondition.RareStrawberryMilkSalesCount: + return globalGameData.GetDailyTotalSalesByFlavorWithRare(22); + case MissionCondition.SaltChocolateSalesCount: + return globalGameData.GetDailyTotalSalesByFlavor(23); + case MissionCondition.RareSaltChocolateSalesCount: + return globalGameData.GetDailyTotalSalesByFlavorWithRare(23); + case MissionCondition.ChocolateGreenteaSalesCount: + return globalGameData.GetDailyTotalSalesByFlavor(24); + case MissionCondition.RareChocolateGreenteaSalesCount: + return globalGameData.GetDailyTotalSalesByFlavorWithRare(24); + case MissionCondition.WatchVideo: + return globalGameData.DailyWatchVideo; + case MissionCondition.VipCustomer: + return globalGameData.DailyVipCustomer; + case MissionCondition.UseFertilizer: + return globalGameData.DailyUseFertiliser; + case MissionCondition.UseAdWalker: + return globalGameData.DailyUseAdWalker; + case MissionCondition.UseAutoCook: + return globalGameData.DailyUseAutoCook; + default: + return 0; + } + } + } +} \ No newline at end of file diff --git a/popcorn/Assets/MyGame/Scenes/Main/Scripts/MissionUtils.cs.meta b/popcorn/Assets/MyGame/Scenes/Main/Scripts/MissionUtils.cs.meta new file mode 100644 index 00000000..e644ea51 --- /dev/null +++ b/popcorn/Assets/MyGame/Scenes/Main/Scripts/MissionUtils.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 9ec53ae7c7694cd5b2f3d6241d23e5c1 +timeCreated: 1670303820 \ No newline at end of file diff --git a/popcorn/Assets/MyGame/Scripts/GameDataObserver.cs b/popcorn/Assets/MyGame/Scripts/GameDataObserver.cs index 8e105e04..7051fab7 100644 --- a/popcorn/Assets/MyGame/Scripts/GameDataObserver.cs +++ b/popcorn/Assets/MyGame/Scripts/GameDataObserver.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Linq; +using MyGame.Scenes.Main.Scripts; using MyGame.Scripts; using UniRx; using UnityEngine; @@ -33,7 +34,6 @@ public class GameDataObserver : SingletonMonoBehaviour private GameData cityGameData; private List missionDataList; private List latestNormalMissions; - private List normalMissionList; private static readonly MissionCondition[] StaticMissionConditions = { MissionCondition.UseFertilizer, @@ -55,7 +55,7 @@ public class GameDataObserver : SingletonMonoBehaviour heartObserver.OnNext(GameDataUtils.GetTotalHeart()); sceneCounter.OnNext(SceneManager.sceneCount); shopLevelObserver.OnNext(globalGameData.ViewedShopLevel); - achievedMissionObserver.OnNext(cityGameData.AchievedMission.Count); + achievedMissionObserver.OnNext(globalGameData.AchievedMission.Count + cityGameData.AchievedMission.Count); // addCoinObserver.OnNext(cityGameData.TotalAddCoin); subCoinObserver.OnNext(cityGameData.TotalSubCoin); addCornObserver.OnNext(cityGameData.TotalAddCornSeed); @@ -68,7 +68,6 @@ public class GameDataObserver : SingletonMonoBehaviour // ミッション達成チェッカー missionDataList = SpreadsheetDataManager.Instance.GetBaseDataList(Const.MissionDataSheet); - normalMissionList = missionDataList.Where(data => data.Category == MissionCategory.Normal).ToList(); UpdateLatestNormalMissions(); // 店舗レベルアップorミッション達成でリスト更新して達成チェック @@ -132,7 +131,7 @@ public class GameDataObserver : SingletonMonoBehaviour // 新ミッション登録 var targetList = missionDataList .Where(data => data.Category == MissionCategory.Daily && data.shopLevel <= globalGameData.ViewedShopLevel) - .Where(data => MissionManager.CheckAvailableMission(data, globalGameData.MyRecipes)) + .Where(data => MissionUtils.CheckAvailableMission(data, globalGameData.MyRecipes)) .ToList(); var staticMissionList = targetList .Where(data => StaticMissionConditions.Contains(data.Condition)) @@ -150,20 +149,13 @@ public class GameDataObserver : SingletonMonoBehaviour }); } - private void UpdateLatestNormalMissions() - { - // 各条件の最前の未達成のミッションのみにフィルタ - latestNormalMissions = normalMissionList - .Where(data => data.shopLevel <= cityGameData.ViewedShopLevel) - .Where(data => !cityGameData.AchievedMission.Contains(data.id)) - .GroupBy(data => data.Condition, (_, list) => list.FirstOrDefault()).ToList(); - } + private void UpdateLatestNormalMissions() => latestNormalMissions = MissionUtils.GetLatestNormalMissions().ToList(); private void CheckNormalMissionNewAchieved(MissionCondition condition) { if (latestNormalMissions .Where(data => data.Condition == condition) - .Any(data => data.count <= MissionManager.GetProgressValue(data))) + .Any(data => data.count <= MissionUtils.GetProgressValue(data))) { updateMissionAchieved.Value = true; } @@ -172,7 +164,7 @@ public class GameDataObserver : SingletonMonoBehaviour private void CheckNormalMissionNewAchieved() { updateMissionAchieved.Value = latestNormalMissions - .Any(data => data.count <= MissionManager.GetProgressValue(data)); + .Any(data => data.count <= MissionUtils.GetProgressValue(data)); } private void CheckDailyMissionNewAchieved() @@ -181,7 +173,7 @@ public class GameDataObserver : SingletonMonoBehaviour .Except(globalGameData.dailyMissionAchievedIdArray); if (missionDataList .Where(data => ids.Contains(data.id)) - .Any(missionData => missionData.count <= MissionManager.GetDailyProgressValue(missionData))) + .Any(missionData => missionData.count <= MissionUtils.GetDailyProgressValue(missionData))) { updateMissionAchieved.Value = true; } @@ -196,7 +188,7 @@ public class GameDataObserver : SingletonMonoBehaviour } } - public void CheckMissionProgress(){ + public void UpdateMissionProgress(){ updateMissionProgress.OnNext(Unit.Default); } diff --git a/popcorn/Assets/MyGame/Scripts/HeaderManager.cs b/popcorn/Assets/MyGame/Scripts/HeaderManager.cs index f7d6f4a1..fad3c339 100644 --- a/popcorn/Assets/MyGame/Scripts/HeaderManager.cs +++ b/popcorn/Assets/MyGame/Scripts/HeaderManager.cs @@ -32,7 +32,7 @@ public class HeaderManager : MonoBehaviour MissionManager.ShowDialog(() => { isOpenMission = false; - GameDataObserver.Instance.CheckMissionProgress(); + GameDataObserver.Instance.UpdateMissionProgress(); }, active => missionIndicator.SetActive(active)); }).AddTo(this);