共通ミッション周り修正

This commit is contained in:
kimura 2022-12-06 15:26:09 +09:00
parent 750b5166bc
commit a6125c289d
5 changed files with 365 additions and 327 deletions

View File

@ -2,6 +2,7 @@ using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using I2.Loc; using I2.Loc;
using MyGame.Scenes.Main.Scripts;
using MyGame.Scripts; using MyGame.Scripts;
using UniRx; using UniRx;
using UnityEngine; using UnityEngine;
@ -69,7 +70,7 @@ public class MissionManager : MonoBehaviour
// ミッション読み込み // ミッション読み込み
var missionList = SpreadsheetDataManager.Instance.GetBaseDataList<MissionData>(Const.MissionDataSheet); var missionList = SpreadsheetDataManager.Instance.GetBaseDataList<MissionData>(Const.MissionDataSheet);
GenerateNormalMission(missionList); GenerateNormalMission();
// dailyMission // dailyMission
// コンプリートミッション // コンプリートミッション
@ -116,7 +117,7 @@ public class MissionManager : MonoBehaviour
foreach (var missionData in missionList.Where(data => globalGameData.dailyMissionIdArray.Contains(data.id))) foreach (var missionData in missionList.Where(data => globalGameData.dailyMissionIdArray.Contains(data.id)))
{ {
var missionView = listView.AddItemView(missionData); var missionView = listView.AddItemView(missionData);
var progressValue = GetDailyProgressValue(missionData); var progressValue = MissionUtils.GetDailyProgressValue(missionData);
missionView.SetData(missionData, progressValue); missionView.SetData(missionData, progressValue);
missionView.SetButtonActive(missionData.count <= progressValue); missionView.SetButtonActive(missionData.count <= progressValue);
if (globalGameData.dailyMissionAchievedIdArray.Contains(missionData.id)) // 達成済み if (globalGameData.dailyMissionAchievedIdArray.Contains(missionData.id)) // 達成済み
@ -157,28 +158,22 @@ public class MissionManager : MonoBehaviour
listView.SetIndicator(MissionCategory.Daily, dailyIndicateFlag > 0); listView.SetIndicator(MissionCategory.Daily, dailyIndicateFlag > 0);
} }
private void GenerateNormalMission(List<MissionData> missionList) private void GenerateNormalMission()
{ {
// ミッション表示 // ミッション表示
normalIndicateFlag = 0; normalIndicateFlag = 0;
var latestMissionList = missionList var latestMissionList = MissionUtils.GetLatestNormalMissions(true);
.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));
// 達成済み未獲得,進行中,すべて達成の順にミッションを並べ替え // 達成済み未獲得,進行中,すべて達成の順にミッションを並べ替え
latestMissionList = latestMissionList.OrderByDescending(data => data.RewardType == MissionRewardType.ShopCustomizeCoin); latestMissionList = latestMissionList.OrderByDescending(data => data.RewardType == MissionRewardType.ShopCustomizeCoin);
latestMissionList = latestMissionList.OrderByDescending(data => data.count <= GetProgressValue(data)); latestMissionList = latestMissionList.OrderByDescending(data => data.count <= MissionUtils.GetProgressValue(data));
latestMissionList = latestMissionList.OrderBy(data => cityGameData.AchievedMission.Contains(data.id)); latestMissionList = latestMissionList.OrderBy(MissionUtils.IsAchievedMission);
foreach (var missionData in latestMissionList) foreach (var missionData in latestMissionList)
{ {
var missionView = listView.AddItemView(missionData); var missionView = listView.AddItemView(missionData);
var progressValue = GetProgressValue(missionData); var progressValue = MissionUtils.GetProgressValue(missionData);
missionView.SetData(missionData, progressValue); missionView.SetData(missionData, progressValue);
missionView.SetButtonActive(missionData.count <= progressValue); missionView.SetButtonActive(missionData.count <= progressValue);
if (cityGameData.AchievedMission.Contains(missionData.id)) // 達成済み if (MissionUtils.IsAchievedMission(missionData)) // 達成済み
{ {
missionView.SetRewarded(); missionView.SetRewarded();
} }
@ -195,12 +190,11 @@ public class MissionManager : MonoBehaviour
LocalCacheManager.Save(MissionDataTag, (missionData, new Action(() => LocalCacheManager.Save(MissionDataTag, (missionData, new Action(() =>
{ {
GetReward(missionData); GetReward(missionData);
// 達成ID保存 AddAchievedList(missionData);
cityGameData.AchievedMission.Add(missionData.id);
GameDataManager.SaveGameData(); GameDataManager.SaveGameData();
listView.ResetItemList(MissionCategory.Normal); listView.ResetItemList(MissionCategory.Normal);
// 通常ミッションリスト更新 // 通常ミッションリスト更新
GenerateNormalMission(missionList); GenerateNormalMission();
onAchieved?.Invoke(normalIndicateFlag + dailyIndicateFlag > 0); onAchieved?.Invoke(normalIndicateFlag + dailyIndicateFlag > 0);
}))); })));
TransitionManager.Instance.LoadSceneAdditive(GameScenes.MissionAchievement); TransitionManager.Instance.LoadSceneAdditive(GameScenes.MissionAchievement);
@ -209,6 +203,8 @@ public class MissionManager : MonoBehaviour
listView.SetIndicator(MissionCategory.Normal, normalIndicateFlag > 0); 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) private string GetTimeLimitText(TimeSpan limitTime)
{ {
if (limitTime.TotalSeconds < 0) limitTime = TimeSpan.Zero; if (limitTime.TotalSeconds < 0) limitTime = TimeSpan.Zero;
@ -222,299 +218,6 @@ public class MissionManager : MonoBehaviour
TransitionManager.Instance.LoadSceneAdditive(GameScenes.Mission); 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) private void GetReward(MissionData missionData)
{ {
switch (missionData.RewardType) switch (missionData.RewardType)

View File

@ -0,0 +1,340 @@
using System.Collections.Generic;
using System.Linq;
namespace MyGame.Scenes.Main.Scripts
{
public class MissionUtils
{
/// <summary>
/// 現在の進行中ミッション一覧
/// 各条件の最前の未達成のミッションのみにフィルタ
/// すべて達成した項目を残す場合 withLastAchievedを使う
/// </summary>
/// <param name="withLastAchieved"></param>
/// <returns></returns>
public static IEnumerable<MissionData> GetLatestNormalMissions(bool withLastAchieved = false)
{
var cityGameData = GameDataManager.GetCurrentCityGameData();
var globalGameData = GameDataManager.GameData;
return SpreadsheetDataManager.Instance.GetBaseDataList<MissionData>(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;
}
}
}
}

View File

@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 9ec53ae7c7694cd5b2f3d6241d23e5c1
timeCreated: 1670303820

View File

@ -1,6 +1,7 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using MyGame.Scenes.Main.Scripts;
using MyGame.Scripts; using MyGame.Scripts;
using UniRx; using UniRx;
using UnityEngine; using UnityEngine;
@ -33,7 +34,6 @@ public class GameDataObserver : SingletonMonoBehaviour<GameDataObserver>
private GameData cityGameData; private GameData cityGameData;
private List<MissionData> missionDataList; private List<MissionData> missionDataList;
private List<MissionData> latestNormalMissions; private List<MissionData> latestNormalMissions;
private List<MissionData> normalMissionList;
private static readonly MissionCondition[] StaticMissionConditions = { private static readonly MissionCondition[] StaticMissionConditions = {
MissionCondition.UseFertilizer, MissionCondition.UseFertilizer,
@ -55,7 +55,7 @@ public class GameDataObserver : SingletonMonoBehaviour<GameDataObserver>
heartObserver.OnNext(GameDataUtils.GetTotalHeart()); heartObserver.OnNext(GameDataUtils.GetTotalHeart());
sceneCounter.OnNext(SceneManager.sceneCount); sceneCounter.OnNext(SceneManager.sceneCount);
shopLevelObserver.OnNext(globalGameData.ViewedShopLevel); shopLevelObserver.OnNext(globalGameData.ViewedShopLevel);
achievedMissionObserver.OnNext(cityGameData.AchievedMission.Count); achievedMissionObserver.OnNext(globalGameData.AchievedMission.Count + cityGameData.AchievedMission.Count);
// addCoinObserver.OnNext(cityGameData.TotalAddCoin); // addCoinObserver.OnNext(cityGameData.TotalAddCoin);
subCoinObserver.OnNext(cityGameData.TotalSubCoin); subCoinObserver.OnNext(cityGameData.TotalSubCoin);
addCornObserver.OnNext(cityGameData.TotalAddCornSeed); addCornObserver.OnNext(cityGameData.TotalAddCornSeed);
@ -68,7 +68,6 @@ public class GameDataObserver : SingletonMonoBehaviour<GameDataObserver>
// ミッション達成チェッカー // ミッション達成チェッカー
missionDataList = SpreadsheetDataManager.Instance.GetBaseDataList<MissionData>(Const.MissionDataSheet); missionDataList = SpreadsheetDataManager.Instance.GetBaseDataList<MissionData>(Const.MissionDataSheet);
normalMissionList = missionDataList.Where(data => data.Category == MissionCategory.Normal).ToList();
UpdateLatestNormalMissions(); UpdateLatestNormalMissions();
// 店舗レベルアップorミッション達成でリスト更新して達成チェック // 店舗レベルアップorミッション達成でリスト更新して達成チェック
@ -132,7 +131,7 @@ public class GameDataObserver : SingletonMonoBehaviour<GameDataObserver>
// 新ミッション登録 // 新ミッション登録
var targetList = missionDataList var targetList = missionDataList
.Where(data => data.Category == MissionCategory.Daily && data.shopLevel <= globalGameData.ViewedShopLevel) .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(); .ToList();
var staticMissionList = targetList var staticMissionList = targetList
.Where(data => StaticMissionConditions.Contains(data.Condition)) .Where(data => StaticMissionConditions.Contains(data.Condition))
@ -150,20 +149,13 @@ public class GameDataObserver : SingletonMonoBehaviour<GameDataObserver>
}); });
} }
private void UpdateLatestNormalMissions() private void UpdateLatestNormalMissions() => latestNormalMissions = MissionUtils.GetLatestNormalMissions().ToList();
{
// 各条件の最前の未達成のミッションのみにフィルタ
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 CheckNormalMissionNewAchieved(MissionCondition condition) private void CheckNormalMissionNewAchieved(MissionCondition condition)
{ {
if (latestNormalMissions if (latestNormalMissions
.Where(data => data.Condition == condition) .Where(data => data.Condition == condition)
.Any(data => data.count <= MissionManager.GetProgressValue(data))) .Any(data => data.count <= MissionUtils.GetProgressValue(data)))
{ {
updateMissionAchieved.Value = true; updateMissionAchieved.Value = true;
} }
@ -172,7 +164,7 @@ public class GameDataObserver : SingletonMonoBehaviour<GameDataObserver>
private void CheckNormalMissionNewAchieved() private void CheckNormalMissionNewAchieved()
{ {
updateMissionAchieved.Value = latestNormalMissions updateMissionAchieved.Value = latestNormalMissions
.Any(data => data.count <= MissionManager.GetProgressValue(data)); .Any(data => data.count <= MissionUtils.GetProgressValue(data));
} }
private void CheckDailyMissionNewAchieved() private void CheckDailyMissionNewAchieved()
@ -181,7 +173,7 @@ public class GameDataObserver : SingletonMonoBehaviour<GameDataObserver>
.Except(globalGameData.dailyMissionAchievedIdArray); .Except(globalGameData.dailyMissionAchievedIdArray);
if (missionDataList if (missionDataList
.Where(data => ids.Contains(data.id)) .Where(data => ids.Contains(data.id))
.Any(missionData => missionData.count <= MissionManager.GetDailyProgressValue(missionData))) .Any(missionData => missionData.count <= MissionUtils.GetDailyProgressValue(missionData)))
{ {
updateMissionAchieved.Value = true; updateMissionAchieved.Value = true;
} }
@ -196,7 +188,7 @@ public class GameDataObserver : SingletonMonoBehaviour<GameDataObserver>
} }
} }
public void CheckMissionProgress(){ public void UpdateMissionProgress(){
updateMissionProgress.OnNext(Unit.Default); updateMissionProgress.OnNext(Unit.Default);
} }

View File

@ -32,7 +32,7 @@ public class HeaderManager : MonoBehaviour
MissionManager.ShowDialog(() => MissionManager.ShowDialog(() =>
{ {
isOpenMission = false; isOpenMission = false;
GameDataObserver.Instance.CheckMissionProgress(); GameDataObserver.Instance.UpdateMissionProgress();
}, },
active => missionIndicator.SetActive(active)); active => missionIndicator.SetActive(active));
}).AddTo(this); }).AddTo(this);