diff --git a/popcorn/Assets/MyGame/Scripts/CityGameDataDict.cs b/popcorn/Assets/MyGame/Scripts/CityGameDataDict.cs
new file mode 100644
index 00000000..f28a5306
--- /dev/null
+++ b/popcorn/Assets/MyGame/Scripts/CityGameDataDict.cs
@@ -0,0 +1,11 @@
+using System.Collections.Generic;
+
+namespace MyGame.Scripts
+{
+ ///
+ /// 都市ごとのセーブデータ辞書
+ ///
+ public class CityGameDataDict : Dictionary
+ {
+ }
+}
\ No newline at end of file
diff --git a/popcorn/Assets/MyGame/Scripts/CityGameDataDict.cs.meta b/popcorn/Assets/MyGame/Scripts/CityGameDataDict.cs.meta
new file mode 100644
index 00000000..4385380b
--- /dev/null
+++ b/popcorn/Assets/MyGame/Scripts/CityGameDataDict.cs.meta
@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: 0e93992cd9584288a973aca23bfc31fb
+timeCreated: 1662021947
\ No newline at end of file
diff --git a/popcorn/Assets/MyGame/Scripts/Const.cs b/popcorn/Assets/MyGame/Scripts/Const.cs
index 7075ab9b..958d9152 100644
--- a/popcorn/Assets/MyGame/Scripts/Const.cs
+++ b/popcorn/Assets/MyGame/Scripts/Const.cs
@@ -10,6 +10,7 @@ public static class Const {
public static readonly int DefaultMachineLevel = 1;
public static readonly int DefaultRecipeId = 1;
public static readonly int DefaultPanId = 1;
+ public static readonly int DefaultCityId = 1;
public static readonly int ShopTankId = 20;
public static readonly int MaxShopLevel = 18;
public static readonly int TankCapacity = 20;
diff --git a/popcorn/Assets/MyGame/Scripts/GameDataManager.cs b/popcorn/Assets/MyGame/Scripts/GameDataManager.cs
index e84c2b72..bec82134 100644
--- a/popcorn/Assets/MyGame/Scripts/GameDataManager.cs
+++ b/popcorn/Assets/MyGame/Scripts/GameDataManager.cs
@@ -186,8 +186,12 @@ public sealed class GameData {
[DataMember(Name = "Data65")]
public List ScrollGameStageScoreList;
+ // ワールドマップ追加(v1.7.0)
+ public int CurrentCityId; // 選択中の都市
+ public int[] Cities; // 解放済みの都市
+ public CityGameDataDict CityGameDataDict; // 都市ごとのデータ
- // mission
+ // mission
[DataMember(Name = "Data1001")]
public int TotalAddCoin { get; private set; }
[DataMember(Name = "Data1002")]
@@ -497,6 +501,16 @@ public sealed class GameData {
Const.ShopCustomizeDefaultSignBoardId,
};
}
+
+ if (CurrentCityId < 1)
+ {
+ CurrentCityId = 1;
+ }
+ // CityGameData
+ foreach (var cityGameData in CityGameDataDict.Values)
+ {
+ cityGameData.OnDeserialized();
+ }
// 追加した要素の初期化用
// TODO Release前にまっさらにする
@@ -523,6 +537,7 @@ public sealed class GameData {
ShopCustomizeMyItems = ShopCustomizeMyItems ?? Array.Empty();
ScrollGamePlaceScoreList = ScrollGamePlaceScoreList ?? new List();
ScrollGameStageScoreList = ScrollGameStageScoreList ?? new List();
+ CityGameDataDict ??= new CityGameDataDict();
}
private Dictionary ArrayToDictionary(KeyValueOfintint[] array){
var dictionary = new Dictionary();
@@ -539,6 +554,11 @@ public sealed class GameData {
// lastAdRewardTimeArray = lastAdRewardTimeList.ToArray();
achievedMission = AchievedMission.ToArray();
deliveredOrder = DeliveredOrder.ToArray();
+ // CityGameData
+ foreach (var cityGameData in CityGameDataDict.Values)
+ {
+ cityGameData.PreSerialize();
+ }
}
private KeyValueOfintint[] DictionaryToArray(Dictionary dictionary){
var array = new KeyValueOfintint[dictionary.Count];
@@ -692,6 +712,21 @@ public static class GameDataManager {
.Replace("KVOiIF", "KeyValueOfintInfiniteFloat");
return StringExtensions.XMLToData(str);
}
+
+ ///
+ /// CityIdから都市セーブデータを取得
+ /// はじめの都市のみ、別クラスにより透過的にGameData上の値を直接参照
+ ///
+ ///
+ ///
+ public static GameData GetCityGameData(int cityId) =>
+ cityId switch
+ {
+ 1 => GameData,
+ _ => GameData.CityGameDataDict[cityId]
+ };
+
+ public static GameData GetCurrentCityGameData() => GameData.CityGameDataDict[GameData.CurrentCityId];
#if UNITY_EDITOR || DEVELOPMENT_BUILD
public static void ResetData(){