save works!

This commit is contained in:
Asuro
2025-03-10 22:45:15 +01:00
parent ff00119e5b
commit c7377c3452
11 changed files with 538 additions and 217 deletions

View File

@@ -1,2 +1,56 @@
#pragma once
#include <bx/file.h>
#include <cstdint>
#define SAVE_T(T) \
inline bool Save(const T* obj, uint32_t count, Serializer& serializer) \
{ \
bool isOk = true; \
for (uint32_t i = 0; i < count; ++i) \
{ \
isOk = serializer.Write(&obj[i], sizeof(obj[i])) && isOk; \
} \
return isOk; \
}
namespace Generated
{
struct Serializer
{
bx::Error Err;
bx::FilePath Path;
bx::FileWriter Writer;
bool Init(const bx::FilePath& path)
{
Path = path;
Writer.open(path, false, &Err);
return Err.isOk();
}
bool Write(const void* data, uint32_t size)
{
Writer.write(data, size, &Err);
return Err.isOk();
}
void Finish()
{
Writer.close();
}
};
SAVE_T(uint8_t)
SAVE_T(uint16_t)
SAVE_T(uint32_t)
SAVE_T(uint64_t)
SAVE_T(int8_t)
SAVE_T(int16_t)
SAVE_T(int32_t)
SAVE_T(int64_t)
SAVE_T(float)
SAVE_T(double)
SAVE_T(bool)
SAVE_T(char)
} // namespace Generated

113
src/gen/Generated.cpp Normal file
View File

@@ -0,0 +1,113 @@
#include "Generated.h"
namespace Generated
{
bool Save(const PuzzleElementType::Enum* obj, uint32_t count, Serializer& serializer)
{
bool isOk = true;
for (uint32_t i = 0; i < count; ++i)
{
auto val = (int32_t)obj[i];
isOk = Save(&val, 1, serializer) && isOk;
}
return isOk;
}
bool Save(const PuzPos* obj, uint32_t count, Serializer& serializer)
{
bool isOk = true;
for (uint32_t i = 0; i < count; ++i)
{
isOk = Save(&obj[i].X, 1, serializer) && isOk;
isOk = Save(&obj[i].Y, 1, serializer) && isOk;
}
return isOk;
}
bool Save(const ElemPos* obj, uint32_t count, Serializer& serializer)
{
bool isOk = true;
for (uint32_t i = 0; i < count; ++i)
{
isOk = Save(&obj[i].Position, 1, serializer) && isOk;
isOk = Save(&obj[i].ElemIdx, 1, serializer) && isOk;
}
return isOk;
}
bool Save(const PuzzleNode* obj, uint32_t count, Serializer& serializer)
{
bool isOk = true;
for (uint32_t i = 0; i < count; ++i)
{
isOk = Save(obj[i].PlacedTypes, 4, serializer) && isOk;
}
return isOk;
}
bool Save(const StaticPuzzleCard* obj, uint32_t count, Serializer& serializer)
{
bool isOk = true;
for (uint32_t i = 0; i < count; ++i)
{
isOk = Save(obj[i].Nodes, 4, serializer) && isOk;
isOk = Save(&obj[i].ModelHandle, 1, serializer) && isOk;
}
return isOk;
}
bool Save(const StaticPuzzleCardHandle* obj, uint32_t count, Serializer& serializer)
{
bool isOk = true;
for (uint32_t i = 0; i < count; ++i)
{
isOk = Save(&obj[i].Idx, 1, serializer) && isOk;
}
return isOk;
}
bool Save(const StaticPuzzleData* obj, uint32_t count, Serializer& serializer)
{
bool isOk = true;
for (uint32_t i = 0; i < count; ++i)
{
isOk = Save(obj[i].Cards, 64, serializer) && isOk;
}
return isOk;
}
bool Save(const PuzzleCardStack* obj, uint32_t count, Serializer& serializer)
{
bool isOk = true;
for (uint32_t i = 0; i < count; ++i)
{
isOk = Save(&obj[i].RefCard, 1, serializer) && isOk;
isOk = Save(&obj[i].MaxAvailableCount, 1, serializer) && isOk;
isOk = Save(&obj[i].UsedCount, 1, serializer) && isOk;
}
return isOk;
}
bool Save(const PlacedPuzzleCard* obj, uint32_t count, Serializer& serializer)
{
bool isOk = true;
for (uint32_t i = 0; i < count; ++i)
{
isOk = Save(&obj[i].RefCard, 1, serializer) && isOk;
isOk = Save(&obj[i].Position, 1, serializer) && isOk;
isOk = Save(&obj[i].Rotation, 1, serializer) && isOk;
isOk = Save(&obj[i].IsLocked, 1, serializer) && isOk;
}
return isOk;
}
bool Save(const PuzzleData* obj, uint32_t count, Serializer& serializer)
{
bool isOk = true;
for (uint32_t i = 0; i < count; ++i)
{
isOk = Save(&obj[i].WidthTiles, 1, serializer) && isOk;
isOk = Save(&obj[i].HeightTiles, 1, serializer) && isOk;
isOk = Save(&obj[i].AvailableCardCount, 1, serializer) && isOk;
isOk = Save(obj[i].AvailableCards, 16, serializer) && isOk;
isOk = Save(&obj[i].PlacedCardCount, 1, serializer) && isOk;
isOk = Save(obj[i].PlacedCards, 256, serializer) && isOk;
isOk = Save(obj[i].PlacedNodes, 1024, serializer) && isOk;
isOk = Save(&obj[i].GoalPositionCount, 1, serializer) && isOk;
isOk = Save(obj[i].GoalPositions, 16, serializer) && isOk;
isOk = Save(obj[i].PuzzleName, 64, serializer) && isOk;
}
return isOk;
}
}

View File

@@ -6,7 +6,7 @@ namespace Generated
struct PuzzleElementType
{
static constexpr int32_t EntryCount = 8;
enum class Enum : int32_t
enum Enum : int32_t
{
None,
WaterIn,
@@ -52,7 +52,7 @@ namespace Generated
};
struct PuzzleNode
{
PuzzleElementType PlacedTypes[4] = {};
PuzzleElementType::Enum PlacedTypes[4] = {};
};
struct StaticPuzzleCard
{
@@ -91,5 +91,16 @@ namespace Generated
PuzzleNode PlacedNodes[1024] = {};
uint32_t GoalPositionCount = {};
ElemPos GoalPositions[16] = {};
char PuzzleName[64] = {};
};
bool Save(const PuzzleElementType::Enum* obj, uint32_t count, Serializer& serializer);
bool Save(const PuzPos* obj, uint32_t count, Serializer& serializer);
bool Save(const ElemPos* obj, uint32_t count, Serializer& serializer);
bool Save(const PuzzleNode* obj, uint32_t count, Serializer& serializer);
bool Save(const StaticPuzzleCard* obj, uint32_t count, Serializer& serializer);
bool Save(const StaticPuzzleCardHandle* obj, uint32_t count, Serializer& serializer);
bool Save(const StaticPuzzleData* obj, uint32_t count, Serializer& serializer);
bool Save(const PuzzleCardStack* obj, uint32_t count, Serializer& serializer);
bool Save(const PlacedPuzzleCard* obj, uint32_t count, Serializer& serializer);
bool Save(const PuzzleData* obj, uint32_t count, Serializer& serializer);
}