畑ワールド対応

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

View File

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