Add NetUnit save Gen
This commit is contained in:
@@ -18,8 +18,6 @@ constexpr float textMargin = 0.02f;
|
||||
|
||||
void App::init(int screenWidth, int screenHeight)
|
||||
{
|
||||
SetTextLineSpacing(0);
|
||||
|
||||
this->screenWidth = screenWidth;
|
||||
this->screenHeight = screenHeight;
|
||||
this->canvas.init(screenWidth);
|
||||
|
||||
@@ -41,6 +41,8 @@ void DnaManager::init()
|
||||
for (int i = 0; i < size; i++)
|
||||
{
|
||||
fread(&tmp, sizeof(tmp), 1, file);
|
||||
if (tmp >= NUM_PER_GEN) // out of bounds error prevention if buffer was in the past biiger then its now
|
||||
continue;
|
||||
liked.push_back(tmp);
|
||||
}
|
||||
|
||||
@@ -48,6 +50,8 @@ void DnaManager::init()
|
||||
for (int i = 0; i < size; i++)
|
||||
{
|
||||
fread(&tmp, sizeof(tmp), 1, file);
|
||||
if (tmp >= NUM_PER_GEN) // out of bounds error prevention if buffer was in the past biiger then its now
|
||||
continue;
|
||||
disliked.push_back(tmp);
|
||||
}
|
||||
fclose(file);
|
||||
@@ -71,6 +75,7 @@ void DnaManager::init()
|
||||
{
|
||||
DNA::newDna(&vector[i], &randSeed);
|
||||
}
|
||||
saveVec();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -112,7 +117,7 @@ void DnaManager::saveVec()
|
||||
fclose(file);
|
||||
}
|
||||
|
||||
Unit DnaManager::next()
|
||||
UiUnit DnaManager::next()
|
||||
{
|
||||
if (queued >= NUM_PER_GEN)
|
||||
{
|
||||
@@ -124,7 +129,7 @@ Unit DnaManager::next()
|
||||
return {ret, Liked::tbd, index};
|
||||
}
|
||||
|
||||
void DnaManager::like(Unit unit)
|
||||
void DnaManager::like(UiUnit unit)
|
||||
{
|
||||
int found = -1;
|
||||
if (unit.index == showed)
|
||||
@@ -155,6 +160,7 @@ void DnaManager::like(Unit unit)
|
||||
|
||||
if (showed >= NUM_PER_GEN && queued >= NUM_PER_GEN) // if buffer was biger in the past showed could be more then NUM_PER_GEN so its changed to >= insted of ==
|
||||
{
|
||||
saveGen();
|
||||
newGen();
|
||||
queued = 0;
|
||||
showed = 0;
|
||||
@@ -164,6 +170,37 @@ void DnaManager::like(Unit unit)
|
||||
saveData();
|
||||
}
|
||||
|
||||
void DnaManager::saveGen()
|
||||
{
|
||||
std::vector<NetUnit> gen;
|
||||
gen.resize(NUM_PER_GEN);
|
||||
for (std::size_t i = 0; i < NUM_PER_GEN; i++)
|
||||
{
|
||||
unsigned int *hash = ComputeMD5((unsigned char *)&vector[i], sizeof(Dna));
|
||||
gen[i].hash.a = hash[0];
|
||||
gen[i].hash.b = hash[1];
|
||||
gen[i].hash.c = hash[2];
|
||||
gen[i].hash.d = hash[3];
|
||||
|
||||
gen[i].liked = Liked::tbd;
|
||||
gen[i].index = i;
|
||||
}
|
||||
|
||||
for (auto &&i : liked)
|
||||
{
|
||||
gen[i].liked = Liked::yes;
|
||||
}
|
||||
|
||||
for (auto &&i : disliked)
|
||||
{
|
||||
gen[i].liked = Liked::no;
|
||||
}
|
||||
|
||||
const char *fileName = TextFormat("gen%04d.bin", generation);
|
||||
|
||||
sys::saveDataToFile(fileName, gen.data(), sizeof(NetUnit) * NUM_PER_GEN);
|
||||
}
|
||||
|
||||
void DnaManager::newGen()
|
||||
{
|
||||
if (liked.size() == 0)
|
||||
@@ -193,8 +230,6 @@ void DnaManager::newGen()
|
||||
{
|
||||
for (auto &&i : disliked)
|
||||
{
|
||||
if (i >= NUM_PER_GEN) // out of bounds error prevention if buffer was in the past biiger then its now
|
||||
continue;
|
||||
|
||||
size_t p1 = mrand::getValue(0, liked.size() - 1, &randSeed);
|
||||
size_t p2 = mrand::getValue(0, liked.size() - 1, &randSeed);
|
||||
@@ -203,9 +238,6 @@ void DnaManager::newGen()
|
||||
p2 = mrand::getValue(0, liked.size(), &randSeed);
|
||||
}
|
||||
|
||||
if (p1 >= NUM_PER_GEN || p2 >= NUM_PER_GEN) // out of bounds error prevention if buffer was in the past biiger then its now
|
||||
continue;
|
||||
|
||||
p1 = liked[p1];
|
||||
p2 = liked[p2];
|
||||
Dna *p1p = &vector[p1];
|
||||
|
||||
Reference in New Issue
Block a user