苗を復元する処理を追加

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);
// データ
// 解放済みの畑, 畑の質, 収穫機レベル
var plantSetting = new List<PlantLineType>()
var gameData = GameDataManager.GameData;
gameData.coin = 1000 + Random.Range(0, 1000);
// Debug.Log(gameData.coin);
// 解放済みの畑
if (gameData.PlantLineTypes == null || gameData.PlantLineTypes.Count == 0)
{
PlantLineType.Center,
PlantLineType.Bottom,
};
var fieldLevel = (int)CornFieldRank.Rank3;
var machineLevel = 1;
// コーン株の進行度
var progressDataList = new List<SeedlingProgressData>()
{
GenerateSeedlingData(PlantLineType.Center),
};
gameData.PlantLineTypes = new List<(PlantLineType type, CornFieldRank level)>()
{
(PlantLineType.Center, CornFieldRank.Rank1),
(PlantLineType.Bottom, CornFieldRank.Rank3)
};
}
// 畑の質
// gameData.FieldLevel = CornFieldRank.Rank3;
// 収穫機レベル
gameData.MachineLevel = 1;
// 畑リセット
availableLines.Clear();
foreach (var line in plantLines)
{
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}");
var plantLine = plantLines.First(x => x.LineName == line);
gameData.SeedlingDataList = new List<SeedlingProgressData>();
}
availableLines.Clear();
foreach (var line in gameData.PlantLineTypes)
{
var plantLine = plantLines.First(x => x.LineName == line.type);
plantLine.gameObject.SetActive(true);
plantLine.SetFieldLevel(line.level);
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)
{
var lineData = progressDataList.First(x => x.type == line.LineName);
var lineData = gameData.SeedlingDataList.First(x => x.type == line.LineName);
var i = 0;
foreach (var seedling in line.Seedlings)
{
var index = 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(_ =>
{
// 収穫
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;
harvestedCornCount.Value += harvestedCorn;
@ -107,8 +117,11 @@ public class CornField : MonoBehaviour
});
}
// 新しい苗
lineData.Seedlings[index] = GenerateSeedlingGene();
seedling.SetSeedlingGene(lineData.Seedlings[index].firstTime, lineData.Seedlings[index].period, CornFieldRank.Rank1);
var seedlingDataIndex = gameData.SeedlingDataList.FindIndex(x => x.type == line.LineName);
var newGene = GenerateSeedlingGene(line.FieldLevel);
gameData.SeedlingDataList[seedlingDataIndex].Seedlings[index] = newGene;
seedling.SetSeedlingGene(newGene.firstTime, newGene.period, newGene.level);
GameDataManager.SaveGameData();
}).AddTo(compositeDisposable);
}
}
@ -119,24 +132,29 @@ public class CornField : MonoBehaviour
VibrationManager.Instance.PlayVibrationOnce();
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;
foreach (var seedling in line.Seedlings)
{
if (Random.Range(0, 2) == 0)
{
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;
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);
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)
{
@ -144,48 +162,46 @@ public class CornField : MonoBehaviour
return new SeedlingProgressData
{
type = PlantLineType.Top,
Seedlings = new List<(DateTime firstTime, int period)>()
Seedlings = new List<(DateTime firstTime, int period, CornFieldRank rank)>()
{
GenerateSeedlingGene(),
GenerateSeedlingGene(),
GenerateSeedlingGene(),
GenerateSeedlingGene(),
GenerateSeedlingGene(level),
GenerateSeedlingGene(level),
GenerateSeedlingGene(level),
GenerateSeedlingGene(level),
}
};
case PlantLineType.Center:
return new SeedlingProgressData
{
type = PlantLineType.Center,
Seedlings = new List<(DateTime firstTime, int period)>()
Seedlings = new List<(DateTime firstTime, int period, CornFieldRank rank)>()
{
GenerateSeedlingGene(),
GenerateSeedlingGene(),
GenerateSeedlingGene(),
GenerateSeedlingGene(level),
GenerateSeedlingGene(level),
GenerateSeedlingGene(level),
}
};
break;
case PlantLineType.Bottom:
return new SeedlingProgressData
{
type = PlantLineType.Bottom,
Seedlings = new List<(DateTime firstTime, int period)>()
Seedlings = new List<(DateTime firstTime, int period, CornFieldRank rank)>()
{
GenerateSeedlingGene(),
GenerateSeedlingGene(),
GenerateSeedlingGene(),
GenerateSeedlingGene(),
GenerateSeedlingGene(level),
GenerateSeedlingGene(level),
GenerateSeedlingGene(level),
GenerateSeedlingGene(level),
}
};
break;
default:
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.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)
@ -202,10 +218,4 @@ public class CornField : MonoBehaviour
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.Collections.Generic;
[Serializable]
public class SeedlingProgressData
{
public PlantLineType type;
public List<(DateTime firstTime, int period)> Seedlings;
public List<(DateTime firstTime, int period, CornFieldRank level)> Seedlings;
}