simplify puzzle data and auto run codegen

This commit is contained in:
Asuro
2025-03-14 01:33:38 +01:00
parent 97146664f2
commit de88190c47
9 changed files with 82 additions and 143 deletions

View File

@@ -28,7 +28,14 @@ set_property(TARGET PuzGameEngine PROPERTY CXX_STANDARD 17)
target_include_directories(PuzGameEngine PUBLIC) target_include_directories(PuzGameEngine PUBLIC)
# Game # Game
file(GLOB_RECURSE sources_game game/*.cpp game/*.h gen/*.cpp gen/*.h) add_custom_command(
COMMAND "${CMAKE_BINARY_DIR}/minidef.exe" "${CMAKE_SOURCE_DIR}/game/mini.def" "${CMAKE_SOURCE_DIR}/gen/"
DEPENDS "${CMAKE_SOURCE_DIR}/game/mini.def"
OUTPUT "${CMAKE_SOURCE_DIR}/gen/Generated.h" "${CMAKE_SOURCE_DIR}/gen/Generated.cpp"
COMMENT "Genrating from minidef"
)
file(GLOB_RECURSE sources_game game/*.cpp game/*.h gen/Generated.cpp gen/Generated.h gen/Def.h gen/Def.cpp)
file(GLOB source_singleheader dependency/tinygltf/stb_image.h dependency/tinygltf/stb_image_write.h dependency/tinygltf/json.hpp dependency/tinygltf/tiny_gltf.h) file(GLOB source_singleheader dependency/tinygltf/stb_image.h dependency/tinygltf/stb_image_write.h dependency/tinygltf/json.hpp dependency/tinygltf/tiny_gltf.h)
add_library(PuzGame SHARED ${sources_game} ${source_singleheader} ${imgui_sources} ${imgui_backend_sdl}) add_library(PuzGame SHARED ${sources_game} ${source_singleheader} ${imgui_sources} ${imgui_backend_sdl})
set_property(TARGET PuzGame PROPERTY CXX_STANDARD 17) set_property(TARGET PuzGame PROPERTY CXX_STANDARD 17)

View File

@@ -60,24 +60,6 @@ namespace Generated
return data.Cards[H.Idx]; return data.Cards[H.Idx];
} }
bool HasElement(const PuzzleNode& node, PuzzleElementType::Enum search)
{
for (int32_t i = 0; i < Puzzle::Config::MaxElementsPerTile; ++i)
{
if (node.PlacedTypes[i] == search) return true;
}
return false;
}
bool IsEmpty(const PuzzleNode& node)
{
for (int32_t i = 0; i < Puzzle::Config::MaxElementsPerTile; ++i)
{
if (node.PlacedTypes[i] != PuzzleElementType::None) return false;
}
return true;
}
bool IsValid(StaticPuzzleCardHandle h) bool IsValid(StaticPuzzleCardHandle h)
{ {
return h.Idx != UINT16_MAX; return h.Idx != UINT16_MAX;
@@ -89,18 +71,43 @@ namespace Generated
return stack.MaxAvailableCount - stack.UsedCount; return stack.MaxAvailableCount - stack.UsedCount;
} }
const PuzzleNode& GetNodeAt(const PuzzleData& puz, PuzPos pos) PuzzleElementType::Enum GetNodeAt(const PuzzleData& puz, PuzPos pos)
{ {
assert(pos.X < Puzzle::Config::MaxPuzzleSizeCards && pos.Y < Puzzle::Config::MaxPuzzleSizeCards && pos.X >= 0 && assert(pos.X < Puzzle::Config::MaxPuzzleSizeCards && pos.Y < Puzzle::Config::MaxPuzzleSizeCards && pos.X >= 0 &&
pos.Y >= 0); pos.Y >= 0);
return puz.PlacedNodes[pos.Y * Puzzle::Config::MaxPuzzleSizeCards + pos.X]; // TODO: this is horrible
for (int32_t i = 0; i < puz.PlacedCardCount; ++i)
{
auto& card = puz.PlacedCards[i];
int8_t offsetX = pos.X - card.Position.X;
int8_t offsetY = pos.Y - card.Position.Y;
if (offsetX >= 0 && offsetX < Puzzle::Config::CardSize && offsetY >= 0 &&
offsetY < Puzzle::Config::CardSize)
{
PuzzleElementType::Enum cardVal =
GetCardNodeAt(GetCard(GetStaticPuzzleData(), card.RefCard), offsetX, offsetY);
if (cardVal != PuzzleElementType::None) return cardVal;
}
}
return puz.BackgroundTiles[pos.Y * Puzzle::Config::MaxPuzzleSizeCards + pos.X];
} }
PuzzleElementType::Enum GetElementAt(const PuzzleData& puz, ElemPos pos) PuzzleElementType::Enum GetCardNodeAt(const StaticPuzzleCard& card, int8_t x, int8_t y)
{ {
assert(pos.ElemIdx < Puzzle::Config::MaxElementsPerTile); assert(x >= 0 && x < Puzzle::Config::CardSize);
const PuzzleNode& node = GetNodeAt(puz, pos.Position); assert(y >= 0 && y < Puzzle::Config::CardSize);
return node.PlacedTypes[pos.ElemIdx];
// TODO: account for card rotation
return card.Elements[y * Puzzle::Config::CardSize + x];
}
PuzzleElementType::Enum& EditCardNodeAt(StaticPuzzleCard& card, int8_t x, int8_t y)
{
assert(x >= 0 && x < Puzzle::Config::CardSize);
assert(y >= 0 && y < Puzzle::Config::CardSize);
// TODO: account for card rotation
return card.Elements[y * Puzzle::Config::CardSize + x];
} }
bool PuzzleSolver::IsPuzzleSolved(const PuzzleData& puzzle) bool PuzzleSolver::IsPuzzleSolved(const PuzzleData& puzzle)
@@ -117,16 +124,15 @@ namespace Generated
return IsSolved; return IsSolved;
} }
bool PuzzleSolver::IsExitSatisfied(const PuzzleData& puzzle, ElemPos pos) bool PuzzleSolver::IsExitSatisfied(const PuzzleData& puzzle, PuzPos pos)
{ {
const PuzzleNode& goalNode = GetNodeAt(puzzle, pos.Position); PuzzleElementType::Enum goalType = GetNodeAt(puzzle, pos);
PuzzleElementType::Enum goalType = GetElementAt(puzzle, pos);
uint32_t currentPositionQueueIdx = 0; uint32_t currentPositionQueueIdx = 0;
uint32_t positionQueueCount = 0; uint32_t positionQueueCount = 0;
PuzPos positionQueue[Puzzle::Config::MaxTilesInPuzzle]; PuzPos positionQueue[Puzzle::Config::MaxTilesInPuzzle];
positionQueue[0] = pos.Position; positionQueue[0] = pos;
positionQueueCount++; positionQueueCount++;
while (positionQueueCount > 0) while (positionQueueCount > 0)
{ {
@@ -137,13 +143,9 @@ namespace Generated
PuzPos nextPos = currentPos + dir; PuzPos nextPos = currentPos + dir;
if (IsValidGoalConnection(puzzle, nextPos, currentPos, goalType)) if (IsValidGoalConnection(puzzle, nextPos, currentPos, goalType))
{ {
const PuzzleNode& node = GetNodeAt(puzzle, nextPos); if (IsValidSource(GetNodeAt(puzzle, nextPos), goalType))
for (PuzzleElementType::Enum e : node.PlacedTypes)
{ {
if (IsValidSource(e, goalType)) return true;
{
return true;
}
} }
positionQueue[positionQueueCount] = nextPos; positionQueue[positionQueueCount] = nextPos;
positionQueueCount++; positionQueueCount++;
@@ -159,18 +161,18 @@ namespace Generated
PuzPos flowTo, PuzPos flowTo,
PuzzleElementType::Enum goalType) PuzzleElementType::Enum goalType)
{ {
const PuzzleNode& from = GetNodeAt(puzzle, flowFrom); auto from = GetNodeAt(puzzle, flowFrom);
const PuzzleNode& to = GetNodeAt(puzzle, flowTo); auto to = GetNodeAt(puzzle, flowTo);
if (goalType == PuzzleElementType::WaterGoal) if (goalType == PuzzleElementType::WaterGoal)
{ {
return HasElement(from, PuzzleElementType::WaterIn) || HasElement(from, PuzzleElementType::WaterChannel) || return from == PuzzleElementType::WaterIn || from == PuzzleElementType::WaterChannel ||
HasElement(from, PuzzleElementType::WaterGoal); from == PuzzleElementType::WaterGoal;
} }
else if (goalType == PuzzleElementType::ElectricGoal) else if (goalType == PuzzleElementType::ElectricGoal)
{ {
return HasElement(from, PuzzleElementType::ElectricIn) || return from == PuzzleElementType::ElectricIn || from == PuzzleElementType::ElectricGoal ||
HasElement(from, PuzzleElementType::ElectricGoal) || IsEmpty(from); from == PuzzleElementType::None;
} }
assert(false); assert(false);
return false; return false;
@@ -192,14 +194,9 @@ namespace Generated
bx::snprintf(buf, bufSize, "%s/%u.pzl", Puzzle::PuzzleFileDir, puzID); bx::snprintf(buf, bufSize, "%s/%u.pzl", Puzzle::PuzzleFileDir, puzID);
} }
const char* GetShortNodeName(const PuzzleNode& node) const char* GetShortNodeName(const PuzzleElementType::Enum node)
{ {
PuzzleElementType::Enum elemMax = PuzzleElementType::None; return PuzzleElementType::ShortName[node];
for (int32_t i = 0; i < BX_COUNTOF(node.PlacedTypes); ++i)
{
if (node.PlacedTypes[i] > elemMax) elemMax = node.PlacedTypes[i];
}
return PuzzleElementType::ShortName[elemMax];
} }
bool RenderDebugUI(PuzzleData& obj) bool RenderDebugUI(PuzzleData& obj)
@@ -257,7 +254,7 @@ namespace Generated
for (int32_t x = 0; x < obj.WidthTiles; ++x) for (int32_t x = 0; x < obj.WidthTiles; ++x)
{ {
ImGui::PushID(x); ImGui::PushID(x);
PuzzleNode& node = obj.PlacedNodes[Puzzle::Config::MaxPuzzleSizeTiles * y + x]; auto node = GetNodeAt(obj, {int8_t(x), int8_t(y)});
ImVec2 pos = ImVec2{puzCursorStart.x + x * UIPuzBoxSize + 5, puzCursorStart.y + y * UIPuzBoxSize}; ImVec2 pos = ImVec2{puzCursorStart.x + x * UIPuzBoxSize + 5, puzCursorStart.y + y * UIPuzBoxSize};
ImGui::SetCursorScreenPos(pos); ImGui::SetCursorScreenPos(pos);
ImGui::Text("%s", GetShortNodeName(node)); ImGui::Text("%s", GetShortNodeName(node));

View File

@@ -31,17 +31,16 @@ namespace Generated
void LoadStaticPuzzleData(); void LoadStaticPuzzleData();
void SaveStaticPuzzleData(); void SaveStaticPuzzleData();
const StaticPuzzleCard& GetCard(const StaticPuzzleData& data, StaticPuzzleCardHandle H); const StaticPuzzleCard& GetCard(const StaticPuzzleData& data, StaticPuzzleCardHandle H);
bool HasElement(const PuzzleNode& node, PuzzleElementType::Enum search);
bool IsEmpty(const PuzzleNode& node);
bool IsValid(StaticPuzzleCardHandle h); bool IsValid(StaticPuzzleCardHandle h);
uint8_t GetRemainingCount(const PuzzleCardStack& stack); uint8_t GetRemainingCount(const PuzzleCardStack& stack);
const PuzzleNode& GetNodeAt(const PuzzleData& puz, PuzPos pos); PuzzleElementType::Enum GetNodeAt(const PuzzleData& puz, PuzPos pos);
PuzzleElementType::Enum GetElementAt(const PuzzleData& puz, ElemPos pos); PuzzleElementType::Enum GetCardNodeAt(const StaticPuzzleCard& card, int8_t x, int8_t y);
PuzzleElementType::Enum& EditCardNodeAt(StaticPuzzleCard& card, int8_t x, int8_t y);
struct PuzzleSolver struct PuzzleSolver
{ {
bool IsPuzzleSolved(const Generated::PuzzleData& puzzle); bool IsPuzzleSolved(const Generated::PuzzleData& puzzle);
bool IsExitSatisfied(const Generated::PuzzleData& puzzle, ElemPos pos); bool IsExitSatisfied(const Generated::PuzzleData& puzzle, PuzPos pos);
// This assumes flowFrom is already verified to be connected. // This assumes flowFrom is already verified to be connected.
bool IsValidGoalConnection(const Generated::PuzzleData& puzzle, bool IsValidGoalConnection(const Generated::PuzzleData& puzzle,

Binary file not shown.

Binary file not shown.

View File

@@ -44,12 +44,6 @@ type PuzPos
i8 Y i8 Y
} }
type ElemPos
{
PuzPos Position
u8 ElemIdx
}
enum PuzzleElementType(u8) enum PuzzleElementType(u8)
{ {
None GameName("Empty") ShortName(" ") None GameName("Empty") ShortName(" ")
@@ -62,15 +56,10 @@ enum PuzzleElementType(u8)
Bridge GameName("Bridge") ShortName("#") Bridge GameName("Bridge") ShortName("#")
} }
type PuzzleNode
{
PuzzleElementType PlacedTypes Arr(4)
}
type StaticPuzzleCard type StaticPuzzleCard
{ {
PuzzleNode Nodes Arr(4) PuzzleElementType Elements Arr(4)
u16 ModelHandle u16 ModelHandle
} }
type StaticPuzzleCardHandle type StaticPuzzleCardHandle
@@ -108,7 +97,7 @@ type PuzzleData
PuzzleCardStack AvailableCards Arr(16) PuzzleCardStack AvailableCards Arr(16)
u32 PlacedCardCount u32 PlacedCardCount
PlacedPuzzleCard PlacedCards Arr(256) PlacedPuzzleCard PlacedCards Arr(256)
PuzzleNode PlacedNodes Arr(1024) PuzzleElementType BackgroundTiles Arr(1024)
u32 GoalPositionCount u32 GoalPositionCount
ElemPos GoalPositions Arr(16) PuzPos GoalPositions Arr(16)
} }

View File

@@ -603,22 +603,22 @@ namespace Game
} }
Tools::ModelDropdown(card.ModelHandle); Tools::ModelDropdown(card.ModelHandle);
for (int32_t y = 0; y < Puzzle::Config::CardSize; ++y) for (int8_t y = 0; y < Puzzle::Config::CardSize; ++y)
{ {
ImGui::PushID(y); ImGui::PushID(y);
for (int32_t x = 0; x < Puzzle::Config::CardSize; ++x) for (int8_t x = 0; x < Puzzle::Config::CardSize; ++x)
{ {
if (x > 0) ImGui::SameLine(); if (x > 0) ImGui::SameLine();
ImGui::PushID(x); ImGui::PushID(x);
auto& node = card.Nodes[y * Puzzle::Config::CardSize + x]; auto& node = Generated::EditCardNodeAt(card, x, y);
if (ImGui::Button(Generated::PuzzleElementType::ShortName[node.PlacedTypes[0]], {26, 24})) if (ImGui::Button(Generated::PuzzleElementType::ShortName[node], {26, 24}))
{ {
int32_t newVal = int32_t(node.PlacedTypes[0]) + 1; int32_t newVal = int32_t(node) + 1;
if (newVal >= Generated::PuzzleElementType::EntryCount) if (newVal >= Generated::PuzzleElementType::EntryCount)
{ {
newVal = 0; newVal = 0;
} }
node.PlacedTypes[0] = Generated::PuzzleElementType::Enum(newVal); node = Generated::PuzzleElementType::Enum(newVal);
} }
ImGui::PopID(); ImGui::PopID();
} }

View File

@@ -144,50 +144,12 @@ namespace Generated
} }
return 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 Load(ElemPos* obj, uint32_t count, Deserializer& serializer)
{
bool isOk = true;
for (uint32_t i = 0; i < count; ++i)
{
isOk = Load(&obj[i].Position, 1, serializer) && isOk;
isOk = Load(&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 Load(PuzzleNode* obj, uint32_t count, Deserializer& serializer)
{
bool isOk = true;
for (uint32_t i = 0; i < count; ++i)
{
isOk = Load(obj[i].PlacedTypes, 4, serializer) && isOk;
}
return isOk;
}
bool Save(const StaticPuzzleCard* obj, uint32_t count, Serializer& serializer) bool Save(const StaticPuzzleCard* obj, uint32_t count, Serializer& serializer)
{ {
bool isOk = true; bool isOk = true;
for (uint32_t i = 0; i < count; ++i) for (uint32_t i = 0; i < count; ++i)
{ {
isOk = Save(obj[i].Nodes, 4, serializer) && isOk; isOk = Save(obj[i].Elements, 4, serializer) && isOk;
isOk = Save(&obj[i].ModelHandle, 1, serializer) && isOk; isOk = Save(&obj[i].ModelHandle, 1, serializer) && isOk;
} }
return isOk; return isOk;
@@ -197,7 +159,7 @@ namespace Generated
bool isOk = true; bool isOk = true;
for (uint32_t i = 0; i < count; ++i) for (uint32_t i = 0; i < count; ++i)
{ {
isOk = Load(obj[i].Nodes, 4, serializer) && isOk; isOk = Load(obj[i].Elements, 4, serializer) && isOk;
isOk = Load(&obj[i].ModelHandle, 1, serializer) && isOk; isOk = Load(&obj[i].ModelHandle, 1, serializer) && isOk;
} }
return isOk; return isOk;
@@ -290,16 +252,16 @@ namespace Generated
for (uint32_t i = 0; i < count; ++i) for (uint32_t i = 0; i < count; ++i)
{ {
isOk = Save(&obj[i].ID, 1, serializer) && isOk; isOk = Save(&obj[i].ID, 1, serializer) && isOk;
isOk = Save(obj[i].PuzzleName, 64, serializer) && isOk;
isOk = Save(&obj[i].WidthTiles, 1, serializer) && isOk; isOk = Save(&obj[i].WidthTiles, 1, serializer) && isOk;
isOk = Save(&obj[i].HeightTiles, 1, serializer) && isOk; isOk = Save(&obj[i].HeightTiles, 1, serializer) && isOk;
isOk = Save(&obj[i].AvailableCardCount, 1, serializer) && isOk; isOk = Save(&obj[i].AvailableCardCount, 1, serializer) && isOk;
isOk = Save(obj[i].AvailableCards, 16, serializer) && isOk; isOk = Save(obj[i].AvailableCards, 16, serializer) && isOk;
isOk = Save(&obj[i].PlacedCardCount, 1, serializer) && isOk; isOk = Save(&obj[i].PlacedCardCount, 1, serializer) && isOk;
isOk = Save(obj[i].PlacedCards, 256, serializer) && isOk; isOk = Save(obj[i].PlacedCards, 256, serializer) && isOk;
isOk = Save(obj[i].PlacedNodes, 1024, serializer) && isOk; isOk = Save(obj[i].BackgroundTiles, 1024, serializer) && isOk;
isOk = Save(&obj[i].GoalPositionCount, 1, serializer) && isOk; isOk = Save(&obj[i].GoalPositionCount, 1, serializer) && isOk;
isOk = Save(obj[i].GoalPositions, 16, serializer) && isOk; isOk = Save(obj[i].GoalPositions, 16, serializer) && isOk;
isOk = Save(obj[i].PuzzleName, 64, serializer) && isOk;
} }
return isOk; return isOk;
} }
@@ -309,16 +271,16 @@ namespace Generated
for (uint32_t i = 0; i < count; ++i) for (uint32_t i = 0; i < count; ++i)
{ {
isOk = Load(&obj[i].ID, 1, serializer) && isOk; isOk = Load(&obj[i].ID, 1, serializer) && isOk;
isOk = Load(obj[i].PuzzleName, 64, serializer) && isOk;
isOk = Load(&obj[i].WidthTiles, 1, serializer) && isOk; isOk = Load(&obj[i].WidthTiles, 1, serializer) && isOk;
isOk = Load(&obj[i].HeightTiles, 1, serializer) && isOk; isOk = Load(&obj[i].HeightTiles, 1, serializer) && isOk;
isOk = Load(&obj[i].AvailableCardCount, 1, serializer) && isOk; isOk = Load(&obj[i].AvailableCardCount, 1, serializer) && isOk;
isOk = Load(obj[i].AvailableCards, 16, serializer) && isOk; isOk = Load(obj[i].AvailableCards, 16, serializer) && isOk;
isOk = Load(&obj[i].PlacedCardCount, 1, serializer) && isOk; isOk = Load(&obj[i].PlacedCardCount, 1, serializer) && isOk;
isOk = Load(obj[i].PlacedCards, 256, serializer) && isOk; isOk = Load(obj[i].PlacedCards, 256, serializer) && isOk;
isOk = Load(obj[i].PlacedNodes, 1024, serializer) && isOk; isOk = Load(obj[i].BackgroundTiles, 1024, serializer) && isOk;
isOk = Load(&obj[i].GoalPositionCount, 1, serializer) && isOk; isOk = Load(&obj[i].GoalPositionCount, 1, serializer) && isOk;
isOk = Load(obj[i].GoalPositions, 16, serializer) && isOk; isOk = Load(obj[i].GoalPositions, 16, serializer) && isOk;
isOk = Load(obj[i].PuzzleName, 64, serializer) && isOk;
} }
return isOk; return isOk;
} }

View File

@@ -98,21 +98,10 @@ namespace Generated
int8_t X = {}; int8_t X = {};
int8_t Y = {}; int8_t Y = {};
}; };
struct ElemPos
{
static constexpr uint32_t Hash = 3966109730;
PuzPos Position = {};
uint8_t ElemIdx = {};
};
struct PuzzleNode
{
static constexpr uint32_t Hash = 1417779061;
PuzzleElementType::Enum PlacedTypes[4] = {};
};
struct StaticPuzzleCard struct StaticPuzzleCard
{ {
static constexpr uint32_t Hash = 110653106; static constexpr uint32_t Hash = 2507139249;
PuzzleNode Nodes[4] = {}; PuzzleElementType::Enum Elements[4] = {};
uint16_t ModelHandle = {}; uint16_t ModelHandle = {};
}; };
struct StaticPuzzleCardHandle struct StaticPuzzleCardHandle
@@ -122,7 +111,7 @@ namespace Generated
}; };
struct StaticPuzzleData struct StaticPuzzleData
{ {
static constexpr uint32_t Hash = 1881743597; static constexpr uint32_t Hash = 3210954810;
StaticPuzzleCard Cards[64] = {}; StaticPuzzleCard Cards[64] = {};
}; };
struct PuzzleCardStack struct PuzzleCardStack
@@ -142,18 +131,18 @@ namespace Generated
}; };
struct PuzzleData struct PuzzleData
{ {
static constexpr uint32_t Hash = 255994202; static constexpr uint32_t Hash = 2775382112;
uint16_t ID = {}; uint16_t ID = {};
char PuzzleName[64] = {};
uint8_t WidthTiles = {}; uint8_t WidthTiles = {};
uint8_t HeightTiles = {}; uint8_t HeightTiles = {};
uint32_t AvailableCardCount = {}; uint32_t AvailableCardCount = {};
PuzzleCardStack AvailableCards[16] = {}; PuzzleCardStack AvailableCards[16] = {};
uint32_t PlacedCardCount = {}; uint32_t PlacedCardCount = {};
PlacedPuzzleCard PlacedCards[256] = {}; PlacedPuzzleCard PlacedCards[256] = {};
PuzzleNode PlacedNodes[1024] = {}; PuzzleElementType::Enum BackgroundTiles[1024] = {};
uint32_t GoalPositionCount = {}; uint32_t GoalPositionCount = {};
ElemPos GoalPositions[16] = {}; PuzPos GoalPositions[16] = {};
char PuzzleName[64] = {};
}; };
bool Save(const PuzzleElementType::Enum* obj, uint32_t count, Serializer& serializer); bool Save(const PuzzleElementType::Enum* obj, uint32_t count, Serializer& serializer);
bool Load(PuzzleElementType::Enum* obj, uint32_t count, Deserializer& serializer); bool Load(PuzzleElementType::Enum* obj, uint32_t count, Deserializer& serializer);
@@ -169,10 +158,6 @@ namespace Generated
bool Load(Mat4* obj, uint32_t count, Deserializer& serializer); bool Load(Mat4* obj, uint32_t count, Deserializer& serializer);
bool Save(const PuzPos* obj, uint32_t count, Serializer& serializer); bool Save(const PuzPos* obj, uint32_t count, Serializer& serializer);
bool Load(PuzPos* obj, uint32_t count, Deserializer& serializer); bool Load(PuzPos* obj, uint32_t count, Deserializer& serializer);
bool Save(const ElemPos* obj, uint32_t count, Serializer& serializer);
bool Load(ElemPos* obj, uint32_t count, Deserializer& serializer);
bool Save(const PuzzleNode* obj, uint32_t count, Serializer& serializer);
bool Load(PuzzleNode* obj, uint32_t count, Deserializer& serializer);
bool Save(const StaticPuzzleCard* obj, uint32_t count, Serializer& serializer); bool Save(const StaticPuzzleCard* obj, uint32_t count, Serializer& serializer);
bool Load(StaticPuzzleCard* obj, uint32_t count, Deserializer& serializer); bool Load(StaticPuzzleCard* obj, uint32_t count, Deserializer& serializer);
bool Save(const StaticPuzzleCardHandle* obj, uint32_t count, Serializer& serializer); bool Save(const StaticPuzzleCardHandle* obj, uint32_t count, Serializer& serializer);