畑ワールド対応

This commit is contained in:
kimura 2022-10-14 15:24:47 +09:00
parent faa0f8c56e
commit 712208b9d6
2 changed files with 53 additions and 51 deletions

View File

@ -68,9 +68,10 @@ public class CornField : MonoBehaviour
SoundManager.Instance.PlayBGM("bgm_Main"); SoundManager.Instance.PlayBGM("bgm_Main");
// データ // データ
var gameData = GameDataManager.GameData; var globalGameData = GameDataManager.GameData;
var cityGameData = GameDataManager.GetCurrentCityGameData();
if (!gameData.FinishedFlags.HasFlag(TutorialFlag.CornField)) if (!globalGameData.FinishedFlags.HasFlag(TutorialFlag.CornField))
{ {
promoteGrowthButton.gameObject.SetActive(false); promoteGrowthButton.gameObject.SetActive(false);
TutorialManager.Instance.ShowTutorialConversation(5, () => TutorialManager.Instance.ShowTutorialConversation(5, () =>
@ -84,8 +85,8 @@ public class CornField : MonoBehaviour
cornFieldMask.gameObject.SetActive(false); cornFieldMask.gameObject.SetActive(false);
} }
CoinManager.Instance.ChangeCoin(gameData.Coin); CoinManager.Instance.ChangeCoin(cityGameData.Coin);
HeartMeter.Instance.Initialize(gameData.ViewedShopLevel, gameData.Heart); HeartMeter.Instance.Initialize(globalGameData.ViewedShopLevel, cityGameData.Heart);
// ハートゲージがフルかつダイアログが開いていない場合レベルアップ // ハートゲージがフルかつダイアログが開いていない場合レベルアップ
HeartMeter.Instance.FulledHeart HeartMeter.Instance.FulledHeart
@ -95,7 +96,7 @@ public class CornField : MonoBehaviour
.DelaySubscription(TimeSpan.FromSeconds(.4f)) .DelaySubscription(TimeSpan.FromSeconds(.4f))
.Subscribe(_ => .Subscribe(_ =>
{ {
ShopLevelUp.ShowDialog(gameData.ViewedShopLevel + 1); ShopLevelUp.ShowDialog(globalGameData.ViewedShopLevel + 1);
}).AddTo(this); }).AddTo(this);
GameDataObserver.Instance.HeartObserver GameDataObserver.Instance.HeartObserver
@ -106,7 +107,7 @@ public class CornField : MonoBehaviour
HeartMeter.Instance.AddHeart(pair.Current - pair.Previous); HeartMeter.Instance.AddHeart(pair.Current - pair.Previous);
}).AddTo(this); }).AddTo(this);
counterView.Initialize(gameData.CornSeed); counterView.Initialize(cityGameData.CornSeed);
additionView.Initialize(0); additionView.Initialize(0);
SetData(); SetData();
@ -130,7 +131,7 @@ public class CornField : MonoBehaviour
VibrationManager.Instance.PlayVibrationOnce(); VibrationManager.Instance.PlayVibrationOnce();
foreach (var plantLine in plantLines) foreach (var plantLine in plantLines)
{ {
if (!(gameData.PlantLineDataList.FirstOrDefault(data => data.Type == plantLine.LineName) is PlantLineData plantLineData)) if (!(cityGameData.PlantLineDataList.FirstOrDefault(data => data.Type == plantLine.LineName) is PlantLineData plantLineData))
{ {
continue; continue;
} }
@ -140,7 +141,7 @@ public class CornField : MonoBehaviour
{ {
continue; continue;
} }
var progressData = gameData.SeedlingDataList.First(data => data.type == plantLineData.Type).Seedlings[i]; var progressData = cityGameData.SeedlingDataList.First(data => data.type == plantLineData.Type).Seedlings[i];
progressData.FirstTime = progressData.FirstTime.AddSeconds(-1); progressData.FirstTime = progressData.FirstTime.AddSeconds(-1);
plantLine.Seedlings[i].PromoteGrowth(progressData.FirstTime); plantLine.Seedlings[i].PromoteGrowth(progressData.FirstTime);
} }
@ -156,11 +157,11 @@ public class CornField : MonoBehaviour
GetRewardDialog.ShowCornFieldDialog(() => GetRewardDialog.ShowCornFieldDialog(() =>
{ {
isFertilizing.Value = true; isFertilizing.Value = true;
gameData.fertilizerTime = DateTime.UtcNow.AddSeconds(fertilizerWaitTime + fertilizerDuration).ToBinary(); cityGameData.fertilizerTime = DateTime.UtcNow.AddSeconds(fertilizerWaitTime + fertilizerDuration).ToBinary();
#if UNITY_EDITOR #if UNITY_EDITOR
gameData.fertilizerTime = DateTime.UtcNow.AddSeconds(10 + fertilizerDuration).ToBinary(); cityGameData.fertilizerTime = DateTime.UtcNow.AddSeconds(10 + fertilizerDuration).ToBinary();
#endif #endif
gameData.AddUseFertiliser(); globalGameData.AddUseFertiliser();
GameDataManager.SaveGameData(); GameDataManager.SaveGameData();
additionView.IsStopDisapper = true; additionView.IsStopDisapper = true;
@ -177,13 +178,13 @@ public class CornField : MonoBehaviour
// 既存の株は成長済みにする // 既存の株は成長済みにする
foreach (var plantLine in plantLines) foreach (var plantLine in plantLines)
{ {
if (!(gameData.PlantLineDataList.FirstOrDefault(data => data.Type == plantLine.LineName) is PlantLineData plantLineData)) if (!(cityGameData.PlantLineDataList.FirstOrDefault(data => data.Type == plantLine.LineName) is PlantLineData plantLineData))
{ {
continue; continue;
} }
for (int i = 0; i < plantLine.Seedlings.Count; i++) for (int i = 0; i < plantLine.Seedlings.Count; i++)
{ {
var progressData = gameData.SeedlingDataList.First(data => data.type == plantLineData.Type).Seedlings[i]; var progressData = cityGameData.SeedlingDataList.First(data => data.type == plantLineData.Type).Seedlings[i];
progressData.FirstTime = progressData.FirstTime.AddSeconds(-maxPeriod); progressData.FirstTime = progressData.FirstTime.AddSeconds(-maxPeriod);
plantLine.Seedlings[i].PromoteGrowth(progressData.FirstTime); plantLine.Seedlings[i].PromoteGrowth(progressData.FirstTime);
} }
@ -197,7 +198,7 @@ public class CornField : MonoBehaviour
brotherFertilizerAnimation.EndAnimation(); brotherFertilizerAnimation.EndAnimation();
fertilizerEffectView.SetActive(false); fertilizerEffectView.SetActive(false);
SetCornField(); SetCornField();
resetFertilizerTimer.OnNext((int)DateTime.FromBinary(gameData.fertilizerTime).Subtract(DateTime.UtcNow).TotalSeconds); resetFertilizerTimer.OnNext((int)DateTime.FromBinary(cityGameData.fertilizerTime).Subtract(DateTime.UtcNow).TotalSeconds);
this.CallWaitForSeconds(fertilizerFinishWaitTime, () => this.CallWaitForSeconds(fertilizerFinishWaitTime, () =>
{ {
@ -221,14 +222,14 @@ public class CornField : MonoBehaviour
}).AddTo(this); }).AddTo(this);
// 残り時間を取得 // 残り時間を取得
var remaining = (int)DateTime.FromBinary(gameData.fertilizerTime).Subtract(DateTime.UtcNow).TotalSeconds; var remaining = (int)DateTime.FromBinary(cityGameData.fertilizerTime).Subtract(DateTime.UtcNow).TotalSeconds;
resetFertilizerTimer.OnNext(remaining); resetFertilizerTimer.OnNext(remaining);
Observable.EveryApplicationPause() Observable.EveryApplicationPause()
.Where(pause => !pause) .Where(pause => !pause)
.Subscribe(_ => .Subscribe(_ =>
{ {
resetFertilizerTimer.OnNext((int) DateTime.FromBinary(gameData.fertilizerTime).Subtract(DateTime.UtcNow).TotalSeconds); resetFertilizerTimer.OnNext((int) DateTime.FromBinary(cityGameData.fertilizerTime).Subtract(DateTime.UtcNow).TotalSeconds);
}).AddTo(this); }).AddTo(this);
// 収穫カウンター+吸収演出 // 収穫カウンター+吸収演出
@ -277,7 +278,7 @@ public class CornField : MonoBehaviour
additionView.AddHarvestedCount(x.count); additionView.AddHarvestedCount(x.count);
}); });
}).AddTo(this); }).AddTo(this);
var counterTotalCorn = gameData.CornSeed; var counterTotalCorn = cityGameData.CornSeed;
additionView.EndObservable.Subscribe(addCount => additionView.EndObservable.Subscribe(addCount =>
{ {
counterTotalCorn += addCount; counterTotalCorn += addCount;
@ -289,32 +290,33 @@ public class CornField : MonoBehaviour
private void SetCornField(bool useFertilizer = false) private void SetCornField(bool useFertilizer = false)
{ {
compositeDisposable.Clear(); compositeDisposable.Clear();
var gameData = GameDataManager.GameData; var globalGameData = GameDataManager.GameData;
var cityGameData = GameDataManager.GetCurrentCityGameData();
var fieldData = SpreadsheetDataManager.Instance.GetBaseDataList<FieldUpgradeData>(Const.FieldUpgradeDataSheet); var fieldData = SpreadsheetDataManager.Instance.GetBaseDataList<FieldUpgradeData>(Const.FieldUpgradeDataSheet);
var tmpFieldData = fieldData.Where(data => data.cityId == GameDataManager.GameData.CurrentCityId).ToList(); var tmpFieldData = fieldData.Where(data => data.cityId == GameDataManager.GameData.CurrentCityId).ToList();
fieldData = tmpFieldData.Count > 0 ? tmpFieldData : fieldData.Where(data => data.cityId == 0).ToList(); fieldData = tmpFieldData.Count > 0 ? tmpFieldData : fieldData.Where(data => data.cityId == 0).ToList();
var machineList = fieldData.Where(data => data.Type == CornFieldUpgradeType.Machine); var machineList = fieldData.Where(data => data.Type == CornFieldUpgradeType.Machine);
cornHarvester.SetMachine(machineList.First(data => data.level == gameData.MachineLevel).GetPrefab()); cornHarvester.SetMachine(machineList.First(data => data.level == cityGameData.MachineLevel).GetPrefab());
// コーン株の進行度初回データ作成 // コーン株の進行度初回データ作成
foreach (var lineData in gameData.PlantLineDataList) foreach (var lineData in cityGameData.PlantLineDataList)
{ {
if (gameData.SeedlingDataList.Exists(data => data.type == lineData.Type)) if (cityGameData.SeedlingDataList.Exists(data => data.type == lineData.Type))
{ {
continue; continue;
} }
var plantLine = plantLines.First(line => line.LineName == lineData.Type); var plantLine = plantLines.First(line => line.LineName == lineData.Type);
gameData.SeedlingDataList.Add(new SeedlingProgressData cityGameData.SeedlingDataList.Add(new SeedlingProgressData
{ {
type = lineData.Type, type = lineData.Type,
Seedlings = Enumerable.Range(0, plantLine.Seedlings.Count).Select(_ => GenerateSeedlingGene(lineData.Level)).ToList() Seedlings = Enumerable.Range(0, plantLine.Seedlings.Count).Select(_ => GenerateSeedlingGene(lineData.Level)).ToList()
}); });
} }
if (!gameData.FinishedFlags.HasFlag(TutorialFlag.CornField)) if (!globalGameData.FinishedFlags.HasFlag(TutorialFlag.CornField))
{ {
// 既に収穫できる状態にする // 既に収穫できる状態にする
var plantLine = gameData.SeedlingDataList.First(data => data.type == PlantLineType.Center); var plantLine = cityGameData.SeedlingDataList.First(data => data.type == PlantLineType.Center);
foreach (var seedling in plantLine.Seedlings) foreach (var seedling in plantLine.Seedlings)
{ {
seedling.FirstTime = DateTime.MinValue; seedling.FirstTime = DateTime.MinValue;
@ -333,7 +335,7 @@ public class CornField : MonoBehaviour
TutorialManager.Instance.ShowTutorialConversation(6, () => TutorialManager.Instance.ShowTutorialConversation(6, () =>
{ {
promoteGrowthButton.gameObject.SetActive(true); promoteGrowthButton.gameObject.SetActive(true);
gameData.FinishedFlags |= TutorialFlag.CornField; globalGameData.FinishedFlags |= TutorialFlag.CornField;
GameDataManager.SaveGameData(); GameDataManager.SaveGameData();
}); });
}); });
@ -344,7 +346,7 @@ public class CornField : MonoBehaviour
// セーブデータから畑を復元 // セーブデータから畑を復元
foreach (var plantLine in plantLines) foreach (var plantLine in plantLines)
{ {
if (!(gameData.PlantLineDataList.FirstOrDefault(data => data.Type == plantLine.LineName) is PlantLineData plantLineData)) if (!(cityGameData.PlantLineDataList.FirstOrDefault(data => data.Type == plantLine.LineName) is PlantLineData plantLineData))
{ {
continue; continue;
} }
@ -353,7 +355,7 @@ public class CornField : MonoBehaviour
for (int i = 0; i < plantLine.Seedlings.Count; i++) for (int i = 0; i < plantLine.Seedlings.Count; i++)
{ {
var progressData = gameData.SeedlingDataList.First(data => data.type == plantLineData.Type).Seedlings[i]; var progressData = cityGameData.SeedlingDataList.First(data => data.type == plantLineData.Type).Seedlings[i];
var seedling = plantLine.Seedlings[i]; var seedling = plantLine.Seedlings[i];
seedling.SetSeedlingGene(progressData.FirstTime, progressData.Period, progressData.Level); seedling.SetSeedlingGene(progressData.FirstTime, progressData.Period, progressData.Level);
#if DEVELOPMENT_BUILD || UNITY_EDITOR #if DEVELOPMENT_BUILD || UNITY_EDITOR
@ -367,8 +369,8 @@ public class CornField : MonoBehaviour
{ {
VibrationManager.Instance.PlayVibrationOnce(); VibrationManager.Instance.PlayVibrationOnce();
var harvestCount = fieldData.FirstOrDefault(x => x.Type == CornFieldUpgradeType.FieldCenter && x.level == (int)progressData.Level)?.harvested ?? 1; var harvestCount = fieldData.FirstOrDefault(x => x.Type == CornFieldUpgradeType.FieldCenter && x.level == (int)progressData.Level)?.harvested ?? 1;
var harvestedCorn = fieldData.FirstOrDefault(x => x.Type == CornFieldUpgradeType.Machine && x.level == gameData.MachineLevel)?.harvested ?? 20; var harvestedCorn = fieldData.FirstOrDefault(x => x.Type == CornFieldUpgradeType.Machine && x.level == cityGameData.MachineLevel)?.harvested ?? 20;
gameData.CornSeed += harvestedCorn * harvestCount; cityGameData.CornSeed += harvestedCorn * harvestCount;
var seedlingTransform = seedling.transform; var seedlingTransform = seedling.transform;
var harvestEffect = Instantiate(harvestEffectPrefab, seedlingTransform); var harvestEffect = Instantiate(harvestEffectPrefab, seedlingTransform);
@ -423,7 +425,7 @@ public class CornField : MonoBehaviour
// 強化ボタン通知 // 強化ボタン通知
var upgradePrice = int.MaxValue; var upgradePrice = int.MaxValue;
if (fieldData.FirstOrDefault(x => x.Type == CornFieldUpgradeType.Machine && x.level == gameData.MachineLevel + 1)?.price is int nextMachinePrice) if (fieldData.FirstOrDefault(x => x.Type == CornFieldUpgradeType.Machine && x.level == cityGameData.MachineLevel + 1)?.price is int nextMachinePrice)
{ {
upgradePrice = Mathf.Min(upgradePrice, nextMachinePrice); upgradePrice = Mathf.Min(upgradePrice, nextMachinePrice);
} }
@ -431,7 +433,7 @@ public class CornField : MonoBehaviour
{ {
var upgradeType = FieldUpgradeData.PlantTypeToUpgradeType(plantLine.LineName); var upgradeType = FieldUpgradeData.PlantTypeToUpgradeType(plantLine.LineName);
var nextRank = CornFieldRank.Rank1; var nextRank = CornFieldRank.Rank1;
if (gameData.PlantLineDataList.FirstOrDefault(data => data.Type == plantLine.LineName) is PlantLineData plantLineData) if (cityGameData.PlantLineDataList.FirstOrDefault(data => data.Type == plantLine.LineName) is PlantLineData plantLineData)
{ {
if (plantLineData.Level == CornFieldRank.Rank3) if (plantLineData.Level == CornFieldRank.Rank3)
{ {
@ -449,21 +451,21 @@ public class CornField : MonoBehaviour
private void SetData() private void SetData()
{ {
var gameData = GameDataManager.GameData; var cityGameData = GameDataManager.GetCurrentCityGameData();
if (gameData.PlantLineDataList == null || gameData.PlantLineDataList.Count == 0) if (cityGameData.PlantLineDataList == null || cityGameData.PlantLineDataList.Count == 0)
{ {
gameData.PlantLineDataList = new List<PlantLineData> cityGameData.PlantLineDataList = new List<PlantLineData>
{ {
new PlantLineData(PlantLineType.Center, CornFieldRank.Rank1), new PlantLineData(PlantLineType.Center, CornFieldRank.Rank1),
}; };
} }
if (gameData.SeedlingDataList == null || gameData.SeedlingDataList.Count == 0) if (cityGameData.SeedlingDataList == null || cityGameData.SeedlingDataList.Count == 0)
{ {
gameData.SeedlingDataList = new List<SeedlingProgressData>(); cityGameData.SeedlingDataList = new List<SeedlingProgressData>();
} }
if (gameData.MachineLevel == 0) if (cityGameData.MachineLevel == 0)
{ {
gameData.MachineLevel = 1; cityGameData.MachineLevel = 1;
} }
GameDataManager.SaveGameData(); GameDataManager.SaveGameData();
} }

View File

@ -32,7 +32,7 @@ public class CornFieldReinforcement : MonoBehaviour
private void SetView() private void SetView()
{ {
compositeDisposable.Clear(); compositeDisposable.Clear();
var gameData = GameDataManager.GameData; var cityGameData = GameDataManager.GetCurrentCityGameData();
var fieldData = SpreadsheetDataManager.Instance.GetBaseDataList<FieldUpgradeData>(Const.FieldUpgradeDataSheet); var fieldData = SpreadsheetDataManager.Instance.GetBaseDataList<FieldUpgradeData>(Const.FieldUpgradeDataSheet);
var tmpFieldData = fieldData.Where(data => data.cityId == GameDataManager.GameData.CurrentCityId).ToList(); var tmpFieldData = fieldData.Where(data => data.cityId == GameDataManager.GameData.CurrentCityId).ToList();
fieldData = tmpFieldData.Count > 0 ? tmpFieldData : fieldData.Where(data => data.cityId == 0).ToList(); fieldData = tmpFieldData.Count > 0 ? tmpFieldData : fieldData.Where(data => data.cityId == 0).ToList();
@ -41,7 +41,7 @@ public class CornFieldReinforcement : MonoBehaviour
foreach (var view in reinforcementViews) foreach (var view in reinforcementViews)
{ {
var upgradeType = FieldUpgradeData.PlantTypeToUpgradeType(view.LineType); var upgradeType = FieldUpgradeData.PlantTypeToUpgradeType(view.LineType);
if (gameData.PlantLineDataList.FirstOrDefault(x => x.Type == view.LineType) is PlantLineData lineData) if (cityGameData.PlantLineDataList.FirstOrDefault(x => x.Type == view.LineType) is PlantLineData lineData)
{ {
// Max // Max
if (lineData.Level == CornFieldRank.Rank3) if (lineData.Level == CornFieldRank.Rank3)
@ -89,20 +89,20 @@ public class CornFieldReinforcement : MonoBehaviour
// 収穫機 // 収穫機
// Max // Max
var maxLevel = fieldData.Where(x => x.Type == CornFieldUpgradeType.Machine).Max(x => x.level); var maxLevel = fieldData.Where(x => x.Type == CornFieldUpgradeType.Machine).Max(x => x.level);
if (gameData.MachineLevel == maxLevel) if (cityGameData.MachineLevel == maxLevel)
{ {
machineUpgradeView.SetMax(maxLevel); machineUpgradeView.SetMax(maxLevel);
} }
else else
{ {
var price = fieldData.FirstOrDefault(x => x.Type == CornFieldUpgradeType.Machine && x.level == gameData.MachineLevel + 1)?.price ?? 1; var price = fieldData.FirstOrDefault(x => x.Type == CornFieldUpgradeType.Machine && x.level == cityGameData.MachineLevel + 1)?.price ?? 1;
machineUpgradeView.SetButtonActive(price <= CoinManager.Instance.OwnCoin); machineUpgradeView.SetButtonActive(price <= CoinManager.Instance.OwnCoin);
machineUpgradeView.SetData(gameData.MachineLevel, price); machineUpgradeView.SetData(cityGameData.MachineLevel, price);
// 購入ボタン // 購入ボタン
machineUpgradeView.ButtonClickObserve.ThrottleFirst(TimeSpan.FromSeconds(.3f)).Subscribe(_ => machineUpgradeView.ButtonClickObserve.ThrottleFirst(TimeSpan.FromSeconds(.3f)).Subscribe(_ =>
{ {
LocalCacheManager.Save(CornFieldReinforcementDataTypeTag, CornFieldUpgradeType.Machine); LocalCacheManager.Save(CornFieldReinforcementDataTypeTag, CornFieldUpgradeType.Machine);
LocalCacheManager.Save(CornFieldReinforcementDataTag, (gameData.MachineLevel, price, new Action(() => { LocalCacheManager.Save(CornFieldReinforcementDataTag, (cityGameData.MachineLevel, price, new Action(() => {
PurchaseMachine(price); PurchaseMachine(price);
SetView(); SetView();
LocalCacheManager.Load<Action>(CornFieldResetCallbackTag, null)?.Invoke(); LocalCacheManager.Load<Action>(CornFieldResetCallbackTag, null)?.Invoke();
@ -114,26 +114,26 @@ public class CornFieldReinforcement : MonoBehaviour
private void PurchaseField(int price, PlantLineType type, CornFieldRank nextRank) private void PurchaseField(int price, PlantLineType type, CornFieldRank nextRank)
{ {
var gameData = GameDataManager.GameData; var cityGameData = GameDataManager.GetCurrentCityGameData();
if (gameData.PlantLineDataList.FirstOrDefault(x => x.Type == type) is PlantLineData lineData) if (cityGameData.PlantLineDataList.FirstOrDefault(x => x.Type == type) is PlantLineData lineData)
{ {
lineData.Level = nextRank; lineData.Level = nextRank;
} }
else else
{ {
gameData.PlantLineDataList.Add(new PlantLineData(type, CornFieldRank.Rank1)); cityGameData.PlantLineDataList.Add(new PlantLineData(type, CornFieldRank.Rank1));
} }
CoinManager.Instance.SubCoin(price); CoinManager.Instance.SubCoin(price);
gameData.Coin = CoinManager.Instance.OwnCoin; cityGameData.Coin = CoinManager.Instance.OwnCoin;
GameDataManager.SaveGameData(); GameDataManager.SaveGameData();
} }
private void PurchaseMachine(int price) private void PurchaseMachine(int price)
{ {
var gameData = GameDataManager.GameData; var cityGameData = GameDataManager.GetCurrentCityGameData();
gameData.MachineLevel++; cityGameData.MachineLevel++;
CoinManager.Instance.SubCoin(price); CoinManager.Instance.SubCoin(price);
gameData.Coin = CoinManager.Instance.OwnCoin; cityGameData.Coin = CoinManager.Instance.OwnCoin;
GameDataManager.SaveGameData(); GameDataManager.SaveGameData();
} }