From 0bb77d1b3f9f16dadc8d2d643a2e03a3f9f4695d Mon Sep 17 00:00:00 2001 From: kimura Date: Fri, 2 Dec 2022 17:57:11 +0900 Subject: [PATCH] =?UTF-8?q?=E3=82=B7=E3=83=8A=E3=83=AA=E3=82=AA=E5=86=8D?= =?UTF-8?q?=E7=94=9F=E5=AF=BE=E5=BF=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../DebugOption/Scripts/DebugOptionManager.cs | 2 + .../Assets/MyGame/Scripts/GameDataManager.cs | 6 ++ .../Assets/MyGame/Scripts/HeaderManager.cs | 55 ++++++++++++++++++- .../MyGame/Scripts/ItemConditionUtils.cs | 5 ++ 4 files changed, 66 insertions(+), 2 deletions(-) diff --git a/popcorn/Assets/MyGame/Scenes/DebugOption/Scripts/DebugOptionManager.cs b/popcorn/Assets/MyGame/Scenes/DebugOption/Scripts/DebugOptionManager.cs index 5b883644..9f733d37 100644 --- a/popcorn/Assets/MyGame/Scenes/DebugOption/Scripts/DebugOptionManager.cs +++ b/popcorn/Assets/MyGame/Scenes/DebugOption/Scripts/DebugOptionManager.cs @@ -372,6 +372,8 @@ public class DebugOptionManager : MonoBehaviour resetWorldMapButton.OnClickAsObservable().Subscribe(_ => { + globalGameData.UsedScriptCondition.Clear(); + globalGameData.UsedItemCondition.Clear(); globalGameData.CityGameDataKeyValues = new CityGameDataDict.CityGameDataKeyValue[]{}; globalGameData.OnDeserialized(); globalGameData.PartTimerElapsed = 0; diff --git a/popcorn/Assets/MyGame/Scripts/GameDataManager.cs b/popcorn/Assets/MyGame/Scripts/GameDataManager.cs index 7acabc68..3fa57beb 100644 --- a/popcorn/Assets/MyGame/Scripts/GameDataManager.cs +++ b/popcorn/Assets/MyGame/Scripts/GameDataManager.cs @@ -213,6 +213,10 @@ public sealed class GameData { [DataMember(Name = "Data73")] private int[] usedItemCondition; public List UsedItemCondition; + + [DataMember(Name = "Data74")] + private int[] usedScriptCondition; + public List UsedScriptCondition; // mission [DataMember(Name = "Data1001")] @@ -584,6 +588,7 @@ public sealed class GameData { CityGameDataDict = new CityGameDataDict(CityGameDataKeyValues); FundingDict = new FundingDict(FundingDictKeyValues); UsedItemCondition = usedItemCondition?.ToList() ?? new List(); + UsedScriptCondition = usedScriptCondition?.ToList() ?? new List(); } private Dictionary ArrayToDictionary(KeyValueOfintint[] array){ var dictionary = new Dictionary(); @@ -601,6 +606,7 @@ public sealed class GameData { achievedMission = AchievedMission.ToArray(); deliveredOrder = DeliveredOrder.ToArray(); usedItemCondition = UsedItemCondition.ToArray(); + usedScriptCondition = UsedScriptCondition.ToArray(); CityGameDataKeyValues = CityGameDataDict.ToKeyValues(); FundingDictKeyValues = FundingDict.ToKeyValues(); // CityGameData diff --git a/popcorn/Assets/MyGame/Scripts/HeaderManager.cs b/popcorn/Assets/MyGame/Scripts/HeaderManager.cs index 781a8250..0801a8d3 100644 --- a/popcorn/Assets/MyGame/Scripts/HeaderManager.cs +++ b/popcorn/Assets/MyGame/Scripts/HeaderManager.cs @@ -1,9 +1,8 @@ using System; -using System.Collections.Generic; using System.Linq; +using MyGame.Scripts; using UniRx; using UnityEngine; -using UnityEngine.Analytics; using UnityEngine.UI; public class HeaderManager : MonoBehaviour @@ -18,6 +17,7 @@ public class HeaderManager : MonoBehaviour private void Start() { + var cityGameData = GameDataManager.GetCurrentCityGameData(); var isOpenMission = false; settingButton.OnClickAsObservable().ThrottleFirst(TimeSpan.FromSeconds(1f)).Subscribe(_ => { @@ -39,6 +39,15 @@ public class HeaderManager : MonoBehaviour }).AddTo(this); worldMapButton.OnClickAsObservable().ThrottleFirst(TimeSpan.FromSeconds(1f)).Subscribe(_ => { + var shopStock = cityGameData.ShopStock.Count; + var tankStock = cityGameData.StorageTanks.Sum(x => x.Stock); + var totalStock = shopStock + tankStock; + // 最新の都市以外は在庫があるとき他の都市に行けない + if (!GameDataUtils.CheckLatestCity(GameDataManager.GameData.CurrentCityId) && totalStock > 0) + { + // UpdateDialog.ShowDialog(); + // return; + } TransitionManager.Instance.LoadScene(GameScenes.WorldMap); }).AddTo(this); @@ -58,5 +67,47 @@ public class HeaderManager : MonoBehaviour { TransitionManager.Instance.LoadScene(GameScenes.Customize); }).AddTo(this); + + // 都市ごとの店舗レベルアップチェック + var cityShopLevelDataList = SpreadsheetDataManager.Instance.GetBaseDataList(Const.CityShopLevelDataSheet); + var currentCityList = cityShopLevelDataList.Where(data => data.cityId == GameDataManager.GameData.CurrentCityId); + var scriptList = SpreadsheetDataManager.Instance.GetBaseDataList(Const.ScriptDataSheet); + GameDataObserver.Instance.HeartObserver.Subscribe(_ => + { + if (currentCityList.LastOrDefault(data => data.shopLevel == cityGameData.ViewedShopLevel + 1) is not { } newShopLevelData) return; + if (newShopLevelData.heart > cityGameData.Heart) return; + if (UnityEngine.SceneManagement.SceneManager.sceneCount != 1) return; + // レベルアップ処理 + cityGameData.ViewedShopLevel = newShopLevelData.shopLevel; + GameDataManager.SaveGameData(); + // シナリオ読み込み + if (ItemConditionUtils.GetScriptList(newShopLevelData.cityId, ItemCondition.CityLevel).FirstOrDefault() is not { } conditionData) return; + var levelUpScripts = scriptList.Where(data => data.id == conditionData.scriptId).ToList(); + if (levelUpScripts.Count <= 0) return; + BrotherConversation.ShowDialog(levelUpScripts, () => + { + // 既読処理(必要なら + }); + }).AddTo(this); + + // 都市開放チェック + var cityDataList = SpreadsheetDataManager.Instance.GetBaseDataList(Const.CityDataSheet); + GameDataObserver.Instance.HeartObserver.Subscribe(x => + { + var unlockList = GameDataManager.GameData.CityGameDataDict.Keys.ToList(); + unlockList.Add(Const.DefaultCityId); + if (cityDataList.FirstOrDefault(data => !unlockList.Contains(data.id)) is not { } newCityData) return; + if (ItemConditionUtils.GetScriptList(newCityData.id, ItemCondition.CityUnlock, x).FirstOrDefault() is not { } conditionData) return; + if (UnityEngine.SceneManagement.SceneManager.sceneCount != 1) return; + // 都市開放処理 + GameDataUtils.CreateCityData(newCityData.id); + GameDataManager.SaveGameData(); + var levelUpScripts = scriptList.Where(data => data.id == conditionData.scriptId).ToList(); + if (levelUpScripts.Count <= 0) return; + BrotherConversation.ShowDialog(levelUpScripts, () => + { + // ItemConditionUtils.Use(conditionData); + }); + }).AddTo(this); } } diff --git a/popcorn/Assets/MyGame/Scripts/ItemConditionUtils.cs b/popcorn/Assets/MyGame/Scripts/ItemConditionUtils.cs index a6d6ec82..4f17710a 100644 --- a/popcorn/Assets/MyGame/Scripts/ItemConditionUtils.cs +++ b/popcorn/Assets/MyGame/Scripts/ItemConditionUtils.cs @@ -72,6 +72,11 @@ namespace MyGame.Scripts .ToList(); } + public static void Use(ScriptConditionData scriptConditionData) + { + GameDataManager.GameData.UsedScriptCondition.Add(scriptConditionData.id); + } + public static void Use(ItemConditionData itemConditionData) { GameDataManager.GameData.UsedItemCondition.Add(itemConditionData.id);