シナリオ再生対応

This commit is contained in:
kimura 2022-12-02 17:57:11 +09:00
parent 966c678b32
commit 0bb77d1b3f
4 changed files with 66 additions and 2 deletions

View File

@ -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;

View File

@ -213,6 +213,10 @@ public sealed class GameData {
[DataMember(Name = "Data73")]
private int[] usedItemCondition;
public List<int> UsedItemCondition;
[DataMember(Name = "Data74")]
private int[] usedScriptCondition;
public List<int> 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<int>();
UsedScriptCondition = usedScriptCondition?.ToList() ?? new List<int>();
}
private Dictionary<int, int> ArrayToDictionary(KeyValueOfintint[] array){
var dictionary = new Dictionary<int, int>();
@ -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

View File

@ -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<CityShopLevelData>(Const.CityShopLevelDataSheet);
var currentCityList = cityShopLevelDataList.Where(data => data.cityId == GameDataManager.GameData.CurrentCityId);
var scriptList = SpreadsheetDataManager.Instance.GetBaseDataList<BrotherScriptData>(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<CityData>(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);
}
}

View File

@ -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);