苗を復元する処理を追加

This commit is contained in:
kimura 2021-08-02 16:42:23 +09:00
parent 88f3f85cbd
commit 2bfd363f52
2 changed files with 63 additions and 54 deletions

View File

@ -39,56 +39,66 @@ public class CornField : MonoBehaviour
.Subscribe(_ => TransitionManager.Instance.LoadScene(GameScenes.CornField)).AddTo(this); .Subscribe(_ => TransitionManager.Instance.LoadScene(GameScenes.CornField)).AddTo(this);
// データ // データ
// 解放済みの畑, 畑の質, 収穫機レベル var gameData = GameDataManager.GameData;
var plantSetting = new List<PlantLineType>() gameData.coin = 1000 + Random.Range(0, 1000);
// Debug.Log(gameData.coin);
// 解放済みの畑
if (gameData.PlantLineTypes == null || gameData.PlantLineTypes.Count == 0)
{ {
PlantLineType.Center, gameData.PlantLineTypes = new List<(PlantLineType type, CornFieldRank level)>()
PlantLineType.Bottom,
};
var fieldLevel = (int)CornFieldRank.Rank3;
var machineLevel = 1;
// コーン株の進行度
var progressDataList = new List<SeedlingProgressData>()
{ {
GenerateSeedlingData(PlantLineType.Center), (PlantLineType.Center, CornFieldRank.Rank1),
(PlantLineType.Bottom, CornFieldRank.Rank3)
}; };
}
// 畑の質
// gameData.FieldLevel = CornFieldRank.Rank3;
// 収穫機レベル
gameData.MachineLevel = 1;
// 畑リセット // 畑リセット
availableLines.Clear();
foreach (var line in plantLines) foreach (var line in plantLines)
{ {
line.gameObject.SetActive(false); line.gameObject.SetActive(false);
} }
// セーブデータから畑を復元 // セーブデータから畑を復元
foreach (var line in plantSetting) // gameData.SeedlingDataList = new List<SeedlingProgressData>();
if (gameData.SeedlingDataList == null || gameData.SeedlingDataList.Count == 0)
{ {
Debug.Log($"{line}"); gameData.SeedlingDataList = new List<SeedlingProgressData>();
var plantLine = plantLines.First(x => x.LineName == line); }
availableLines.Clear();
foreach (var line in gameData.PlantLineTypes)
{
var plantLine = plantLines.First(x => x.LineName == line.type);
plantLine.gameObject.SetActive(true); plantLine.gameObject.SetActive(true);
plantLine.SetFieldLevel(line.level);
availableLines.Add(plantLine); availableLines.Add(plantLine);
// 初回データ作成 // コーン株の進行度初回データ作成
if (!progressDataList.Exists(x => x.type == line)) if (!gameData.SeedlingDataList.Exists(x => x.type == line.type))
{ {
progressDataList.Add(GenerateSeedlingData(line)); gameData.SeedlingDataList.Add(GenerateSeedlingData(line.type, line.level));
} }
} }
GameDataManager.SaveGameData();
Debug.Log(gameData.SeedlingDataList.Count);
// 株設定 // 株設定
foreach (var line in availableLines) foreach (var line in availableLines)
{ {
var lineData = progressDataList.First(x => x.type == line.LineName); var lineData = gameData.SeedlingDataList.First(x => x.type == line.LineName);
var i = 0; var i = 0;
foreach (var seedling in line.Seedlings) foreach (var seedling in line.Seedlings)
{ {
var index = i; var index = i;
i++; i++;
seedling.SetSeedlingGene(lineData.Seedlings[index].firstTime, lineData.Seedlings[index].period, (CornFieldRank)fieldLevel); seedling.SetSeedlingGene(lineData.Seedlings[index].firstTime, lineData.Seedlings[index].period, lineData.Seedlings[index].level);
seedling.Harvested.Subscribe(_ => seedling.Harvested.Subscribe(_ =>
{ {
// 収穫 // 収穫
VibrationManager.Instance.PlayVibrationOnce(); VibrationManager.Instance.PlayVibrationOnce();
for (int j = 0; j < GetHarvestCount((CornFieldRank)fieldLevel); j++) for (int j = 0; j < GetHarvestCount(lineData.Seedlings[index].level); j++)
{ {
var harvestedCorn = 20; var harvestedCorn = 20;
harvestedCornCount.Value += harvestedCorn; harvestedCornCount.Value += harvestedCorn;
@ -107,8 +117,11 @@ public class CornField : MonoBehaviour
}); });
} }
// 新しい苗 // 新しい苗
lineData.Seedlings[index] = GenerateSeedlingGene(); var seedlingDataIndex = gameData.SeedlingDataList.FindIndex(x => x.type == line.LineName);
seedling.SetSeedlingGene(lineData.Seedlings[index].firstTime, lineData.Seedlings[index].period, CornFieldRank.Rank1); var newGene = GenerateSeedlingGene(line.FieldLevel);
gameData.SeedlingDataList[seedlingDataIndex].Seedlings[index] = newGene;
seedling.SetSeedlingGene(newGene.firstTime, newGene.period, newGene.level);
GameDataManager.SaveGameData();
}).AddTo(compositeDisposable); }).AddTo(compositeDisposable);
} }
} }
@ -119,24 +132,29 @@ public class CornField : MonoBehaviour
VibrationManager.Instance.PlayVibrationOnce(); VibrationManager.Instance.PlayVibrationOnce();
foreach (var line in availableLines) foreach (var line in availableLines)
{ {
var lineData = progressDataList.First(x => x.type == line.LineName); var lineData = gameData.SeedlingDataList.First(x => x.type == line.LineName);
var i = 0; var i = 0;
foreach (var seedling in line.Seedlings) foreach (var seedling in line.Seedlings)
{ {
if (Random.Range(0, 2) == 0) if (Random.Range(0, 2) == 0)
{ {
var tmpData = lineData.Seedlings[i]; var tmpData = lineData.Seedlings[i];
tmpData.firstTime = lineData.Seedlings[i].firstTime.AddSeconds(-1); tmpData.firstTime = tmpData.firstTime.AddSeconds(-1);
seedling.PromoteGrowth(tmpData.firstTime);
lineData.Seedlings[i] = tmpData; lineData.Seedlings[i] = tmpData;
seedling.PromoteGrowth(lineData.Seedlings[i].firstTime);
} }
} }
var seedlingDataIndex = gameData.SeedlingDataList.FindIndex(x => x.type == line.LineName);
gameData.SeedlingDataList[seedlingDataIndex] = lineData;
} }
// 設定のセーブ // 設定のセーブ
Debug.Log($"{gameData.SeedlingDataList[0].Seedlings[2].firstTime} {gameData.SeedlingDataList[0].Seedlings[0].period}");
GameDataManager.SaveGameData();
}).AddTo(compositeDisposable); }).AddTo(compositeDisposable);
Debug.Log($"{gameData.SeedlingDataList[0].Seedlings[2].firstTime} {gameData.SeedlingDataList[0].Seedlings[0].period}");
} }
private SeedlingProgressData GenerateSeedlingData(PlantLineType type) private SeedlingProgressData GenerateSeedlingData(PlantLineType type, CornFieldRank level)
{ {
switch (type) switch (type)
{ {
@ -144,48 +162,46 @@ public class CornField : MonoBehaviour
return new SeedlingProgressData return new SeedlingProgressData
{ {
type = PlantLineType.Top, type = PlantLineType.Top,
Seedlings = new List<(DateTime firstTime, int period)>() Seedlings = new List<(DateTime firstTime, int period, CornFieldRank rank)>()
{ {
GenerateSeedlingGene(), GenerateSeedlingGene(level),
GenerateSeedlingGene(), GenerateSeedlingGene(level),
GenerateSeedlingGene(), GenerateSeedlingGene(level),
GenerateSeedlingGene(), GenerateSeedlingGene(level),
} }
}; };
case PlantLineType.Center: case PlantLineType.Center:
return new SeedlingProgressData return new SeedlingProgressData
{ {
type = PlantLineType.Center, type = PlantLineType.Center,
Seedlings = new List<(DateTime firstTime, int period)>() Seedlings = new List<(DateTime firstTime, int period, CornFieldRank rank)>()
{ {
GenerateSeedlingGene(), GenerateSeedlingGene(level),
GenerateSeedlingGene(), GenerateSeedlingGene(level),
GenerateSeedlingGene(), GenerateSeedlingGene(level),
} }
}; };
break;
case PlantLineType.Bottom: case PlantLineType.Bottom:
return new SeedlingProgressData return new SeedlingProgressData
{ {
type = PlantLineType.Bottom, type = PlantLineType.Bottom,
Seedlings = new List<(DateTime firstTime, int period)>() Seedlings = new List<(DateTime firstTime, int period, CornFieldRank rank)>()
{ {
GenerateSeedlingGene(), GenerateSeedlingGene(level),
GenerateSeedlingGene(), GenerateSeedlingGene(level),
GenerateSeedlingGene(), GenerateSeedlingGene(level),
GenerateSeedlingGene(), GenerateSeedlingGene(level),
} }
}; };
break;
default: default:
throw new ArgumentOutOfRangeException(nameof(type), type, null); throw new ArgumentOutOfRangeException(nameof(type), type, null);
} }
} }
private (DateTime, int) GenerateSeedlingGene() private (DateTime firstTime, int period, CornFieldRank level) GenerateSeedlingGene(CornFieldRank level)
{ {
// return (DateTime.Now, Random.Range(minPeriod, maxPeriod + 1)); // return (DateTime.Now, Random.Range(minPeriod, maxPeriod + 1));
return (DateTime.Now.AddSeconds(-Random.Range(0, 15)), 15 + Random.Range(0, 15)); return (DateTime.Now.AddSeconds(-Random.Range(0, 15)), 15 + Random.Range(0, 15), level);
} }
private int GetHarvestCount(CornFieldRank rank) private int GetHarvestCount(CornFieldRank rank)
@ -202,10 +218,4 @@ public class CornField : MonoBehaviour
throw new ArgumentOutOfRangeException(nameof(rank), rank, null); throw new ArgumentOutOfRangeException(nameof(rank), rank, null);
} }
} }
// Update is called once per frame
void Update()
{
}
} }

View File

@ -1,9 +1,8 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
[Serializable]
public class SeedlingProgressData public class SeedlingProgressData
{ {
public PlantLineType type; public PlantLineType type;
public List<(DateTime firstTime, int period)> Seedlings; public List<(DateTime firstTime, int period, CornFieldRank level)> Seedlings;
} }