343 lines
14 KiB
C++
343 lines
14 KiB
C++
#pragma once
|
|
#include <cstdint>
|
|
|
|
namespace Gen
|
|
{
|
|
struct Serializer;
|
|
struct Deserializer;
|
|
struct PuzzleElementType
|
|
{
|
|
static constexpr uint16_t TypeIdx = 30;
|
|
static constexpr int32_t EntryCount = 8;
|
|
enum Enum : uint8_t
|
|
{
|
|
None,
|
|
WaterIn,
|
|
WaterGoal,
|
|
WaterChannel,
|
|
ElectricIn,
|
|
ElectricGoal,
|
|
Blocked,
|
|
Bridge,
|
|
};
|
|
static constexpr char EntryNames[EntryCount][64]
|
|
{
|
|
"None",
|
|
"WaterIn",
|
|
"WaterGoal",
|
|
"WaterChannel",
|
|
"ElectricIn",
|
|
"ElectricGoal",
|
|
"Blocked",
|
|
"Bridge",
|
|
};
|
|
static constexpr char GameName[EntryCount][64]
|
|
{
|
|
"Empty",
|
|
"Water Source",
|
|
"Water Goal",
|
|
"Water Channel",
|
|
"Electricity Source",
|
|
"Electricity Goal",
|
|
"Blocked",
|
|
"Bridge",
|
|
};
|
|
static constexpr char ShortName[EntryCount][64]
|
|
{
|
|
" ",
|
|
"~+",
|
|
"~!",
|
|
"~",
|
|
"e+",
|
|
"e!",
|
|
"B",
|
|
"#",
|
|
};
|
|
};
|
|
struct EMaterial
|
|
{
|
|
static constexpr uint16_t TypeIdx = 31;
|
|
static constexpr int32_t EntryCount = 2;
|
|
enum Enum : int32_t
|
|
{
|
|
Default,
|
|
UI,
|
|
};
|
|
static constexpr char EntryNames[EntryCount][64]
|
|
{
|
|
"Default",
|
|
"UI",
|
|
};
|
|
};
|
|
struct Vec2
|
|
{
|
|
static constexpr uint16_t TypeIdx = 12;
|
|
float x = {};
|
|
float y = {};
|
|
};
|
|
struct Vec3
|
|
{
|
|
static constexpr uint16_t TypeIdx = 13;
|
|
float x = {};
|
|
float y = {};
|
|
float z = {};
|
|
};
|
|
struct Vec4
|
|
{
|
|
static constexpr uint16_t TypeIdx = 14;
|
|
float x = {};
|
|
float y = {};
|
|
float z = {};
|
|
float w = {};
|
|
};
|
|
struct Mat3
|
|
{
|
|
static constexpr uint16_t TypeIdx = 15;
|
|
float M[9] = {
|
|
1.0f, 0.0f, 0.0f,
|
|
0.0f, 1.0f, 0.0f,
|
|
0.0f, 0.0f, 1.0f
|
|
};
|
|
};
|
|
struct Mat4
|
|
{
|
|
static constexpr uint16_t TypeIdx = 16;
|
|
float M[16] = {
|
|
1.0f, 0.0f, 0.0f, 0.0f,
|
|
0.0f, 1.0f, 0.0f, 0.0f,
|
|
0.0f, 0.0f, 1.0f, 0.0f,
|
|
0.0f, 0.0f, 0.0f, 1.0f
|
|
};
|
|
};
|
|
struct Transform
|
|
{
|
|
static constexpr uint16_t TypeIdx = 17;
|
|
Mat4 M = {};
|
|
Mat4 MI = {};
|
|
Vec3 Position = {};
|
|
Mat4 Rotation = {};
|
|
Vec3 Scale = {1.0f, 1.0f, 1.0f};
|
|
};
|
|
struct AssetHandle
|
|
{
|
|
static constexpr uint16_t TypeIdx = 18;
|
|
uint32_t Idx = UINT32_MAX;
|
|
};
|
|
struct ModelHandle
|
|
{
|
|
static constexpr uint16_t TypeIdx = 19;
|
|
uint16_t ModelIdx = UINT16_MAX;
|
|
AssetHandle Asset = {};
|
|
};
|
|
struct TextureHandle
|
|
{
|
|
static constexpr uint16_t TypeIdx = 20;
|
|
uint16_t TextureIdx = UINT16_MAX;
|
|
AssetHandle Asset = {};
|
|
};
|
|
struct PuzPos
|
|
{
|
|
static constexpr uint16_t TypeIdx = 21;
|
|
int8_t X = {};
|
|
int8_t Y = {};
|
|
};
|
|
struct StaticPuzzleCard
|
|
{
|
|
static constexpr uint16_t TypeIdx = 22;
|
|
PuzzleElementType::Enum Elements[4] = {};
|
|
ModelHandle BaseModelHandle = {};
|
|
ModelHandle NorthCoverHandle = {};
|
|
ModelHandle EastCoverHandle = {};
|
|
ModelHandle SouthCoverHandle = {};
|
|
ModelHandle WestCoverHandle = {};
|
|
TextureHandle ModelTextureHandle = {};
|
|
TextureHandle BoardTextureHandle = {};
|
|
};
|
|
struct StaticPuzzleCardHandle
|
|
{
|
|
static constexpr uint16_t TypeIdx = 23;
|
|
uint16_t Idx = UINT16_MAX;
|
|
};
|
|
struct PuzzleVisualSettings
|
|
{
|
|
static constexpr uint16_t TypeIdx = 24;
|
|
Vec4 TileBaseColor = {};
|
|
Vec4 TileDotColor = {};
|
|
Vec3 Test = {};
|
|
Vec4 DisabledCardTint = {};
|
|
};
|
|
struct StaticPuzzleData
|
|
{
|
|
static constexpr uint16_t TypeIdx = 25;
|
|
StaticPuzzleCard Cards[64] = {};
|
|
PuzzleVisualSettings Visuals = {};
|
|
};
|
|
struct PuzzleCardStack
|
|
{
|
|
static constexpr uint16_t TypeIdx = 26;
|
|
StaticPuzzleCardHandle RefCard = {};
|
|
uint8_t MaxAvailableCount = {};
|
|
uint8_t UsedCount = {};
|
|
};
|
|
struct PlacedPuzzleCard
|
|
{
|
|
static constexpr uint16_t TypeIdx = 27;
|
|
StaticPuzzleCardHandle RefCard = {};
|
|
PuzPos Position = {};
|
|
uint8_t Rotation = {};
|
|
bool IsLocked = {};
|
|
};
|
|
struct PuzzleData
|
|
{
|
|
static constexpr uint16_t TypeIdx = 28;
|
|
uint16_t ID = {};
|
|
char PuzzleName[64] = {};
|
|
uint8_t WidthTiles = {};
|
|
uint8_t HeightTiles = {};
|
|
uint32_t AvailableCardCount = {};
|
|
PuzzleCardStack AvailableCards[16] = {};
|
|
PlacedPuzzleCard PlacedCards[256] = {};
|
|
PuzzleElementType::Enum BackgroundTiles[1024] = {};
|
|
uint32_t GoalPositionCount = {};
|
|
PuzPos GoalPositions[16] = {};
|
|
};
|
|
struct SavedEntityRenderData
|
|
{
|
|
static constexpr uint16_t TypeIdx = 29;
|
|
Vec4 BaseColor = {};
|
|
Vec4 HighlightColor = {};
|
|
Transform TF = {};
|
|
EMaterial::Enum Material = {};
|
|
TextureHandle Texture = {};
|
|
ModelHandle Model = {};
|
|
bool Visible = {};
|
|
};
|
|
bool Save(const PuzzleElementType::Enum* obj, uint32_t count, Serializer& serializer);
|
|
bool Load(PuzzleElementType::Enum* obj, uint32_t count, Deserializer& serializer);
|
|
bool Save(const EMaterial::Enum* obj, uint32_t count, Serializer& serializer);
|
|
bool Load(EMaterial::Enum* obj, uint32_t count, Deserializer& serializer);
|
|
bool Save(const int8_t* obj, uint32_t count, Serializer& serializer);
|
|
bool Load(int8_t* obj, uint32_t count, Deserializer& serializer);
|
|
bool Save(const int16_t* obj, uint32_t count, Serializer& serializer);
|
|
bool Load(int16_t* obj, uint32_t count, Deserializer& serializer);
|
|
bool Save(const int32_t* obj, uint32_t count, Serializer& serializer);
|
|
bool Load(int32_t* obj, uint32_t count, Deserializer& serializer);
|
|
bool Save(const int64_t* obj, uint32_t count, Serializer& serializer);
|
|
bool Load(int64_t* obj, uint32_t count, Deserializer& serializer);
|
|
bool Save(const uint8_t* obj, uint32_t count, Serializer& serializer);
|
|
bool Load(uint8_t* obj, uint32_t count, Deserializer& serializer);
|
|
bool Save(const uint16_t* obj, uint32_t count, Serializer& serializer);
|
|
bool Load(uint16_t* obj, uint32_t count, Deserializer& serializer);
|
|
bool Save(const uint32_t* obj, uint32_t count, Serializer& serializer);
|
|
bool Load(uint32_t* obj, uint32_t count, Deserializer& serializer);
|
|
bool Save(const uint64_t* obj, uint32_t count, Serializer& serializer);
|
|
bool Load(uint64_t* obj, uint32_t count, Deserializer& serializer);
|
|
bool Save(const bool* obj, uint32_t count, Serializer& serializer);
|
|
bool Load(bool* obj, uint32_t count, Deserializer& serializer);
|
|
bool Save(const float* obj, uint32_t count, Serializer& serializer);
|
|
bool Load(float* obj, uint32_t count, Deserializer& serializer);
|
|
bool Save(const double* obj, uint32_t count, Serializer& serializer);
|
|
bool Load(double* obj, uint32_t count, Deserializer& serializer);
|
|
bool Save(const char* obj, uint32_t count, Serializer& serializer);
|
|
bool Load(char* obj, uint32_t count, Deserializer& serializer);
|
|
bool Save(const Vec2* obj, uint32_t count, Serializer& serializer);
|
|
bool Load(Vec2* obj, uint32_t count, Deserializer& serializer);
|
|
bool Save(const Vec3* obj, uint32_t count, Serializer& serializer);
|
|
bool Load(Vec3* obj, uint32_t count, Deserializer& serializer);
|
|
bool Save(const Vec4* obj, uint32_t count, Serializer& serializer);
|
|
bool Load(Vec4* obj, uint32_t count, Deserializer& serializer);
|
|
bool Save(const Mat3* obj, uint32_t count, Serializer& serializer);
|
|
bool Load(Mat3* obj, uint32_t count, Deserializer& serializer);
|
|
bool Save(const Mat4* obj, uint32_t count, Serializer& serializer);
|
|
bool Load(Mat4* obj, uint32_t count, Deserializer& serializer);
|
|
bool Save(const Transform* obj, uint32_t count, Serializer& serializer);
|
|
bool Load(Transform* obj, uint32_t count, Deserializer& serializer);
|
|
bool Save(const AssetHandle* obj, uint32_t count, Serializer& serializer);
|
|
bool Load(AssetHandle* obj, uint32_t count, Deserializer& serializer);
|
|
bool Save(const ModelHandle* obj, uint32_t count, Serializer& serializer);
|
|
bool Load(ModelHandle* obj, uint32_t count, Deserializer& serializer);
|
|
bool Save(const TextureHandle* obj, uint32_t count, Serializer& serializer);
|
|
bool Load(TextureHandle* obj, uint32_t count, Deserializer& serializer);
|
|
bool Save(const PuzPos* obj, uint32_t count, Serializer& serializer);
|
|
bool Load(PuzPos* obj, uint32_t count, Deserializer& serializer);
|
|
bool Save(const StaticPuzzleCard* obj, uint32_t count, Serializer& serializer);
|
|
bool Load(StaticPuzzleCard* obj, uint32_t count, Deserializer& serializer);
|
|
bool Save(const StaticPuzzleCardHandle* obj, uint32_t count, Serializer& serializer);
|
|
bool Load(StaticPuzzleCardHandle* obj, uint32_t count, Deserializer& serializer);
|
|
bool Save(const PuzzleVisualSettings* obj, uint32_t count, Serializer& serializer);
|
|
bool Load(PuzzleVisualSettings* obj, uint32_t count, Deserializer& serializer);
|
|
bool Save(const StaticPuzzleData* obj, uint32_t count, Serializer& serializer);
|
|
bool Load(StaticPuzzleData* obj, uint32_t count, Deserializer& serializer);
|
|
bool Save(const PuzzleCardStack* obj, uint32_t count, Serializer& serializer);
|
|
bool Load(PuzzleCardStack* obj, uint32_t count, Deserializer& serializer);
|
|
bool Save(const PlacedPuzzleCard* obj, uint32_t count, Serializer& serializer);
|
|
bool Load(PlacedPuzzleCard* obj, uint32_t count, Deserializer& serializer);
|
|
bool Save(const PuzzleData* obj, uint32_t count, Serializer& serializer);
|
|
bool Load(PuzzleData* obj, uint32_t count, Deserializer& serializer);
|
|
bool Save(const SavedEntityRenderData* obj, uint32_t count, Serializer& serializer);
|
|
bool Load(SavedEntityRenderData* obj, uint32_t count, Deserializer& serializer);
|
|
|
|
namespace Meta {
|
|
constexpr uint16_t CurrentMetaVersion = 1;
|
|
|
|
struct StrRef
|
|
{
|
|
uint16_t Offset;
|
|
uint16_t Size;
|
|
};
|
|
|
|
struct TypeDef
|
|
{
|
|
uint32_t Size = 0;
|
|
uint32_t Hash = 0;
|
|
char Name[64]{"Dummy"};
|
|
uint16_t ChildCount = 0;
|
|
uint16_t ChildIndices[64]{0};
|
|
uint16_t ChildArraySizes[64]{0};
|
|
StrRef MemberNameIndices[64]{0};
|
|
};
|
|
|
|
struct MetadataTable
|
|
{
|
|
TypeDef TypeDefinitions[32]
|
|
{
|
|
TypeDef{sizeof(int8_t), 0, "i8", 0, {}, {}, {}},
|
|
TypeDef{sizeof(int16_t), 1, "i16", 0, {}, {}, {}},
|
|
TypeDef{sizeof(int32_t), 2, "i32", 0, {}, {}, {}},
|
|
TypeDef{sizeof(int64_t), 3, "i64", 0, {}, {}, {}},
|
|
TypeDef{sizeof(uint8_t), 4, "u8", 0, {}, {}, {}},
|
|
TypeDef{sizeof(uint16_t), 5, "u16", 0, {}, {}, {}},
|
|
TypeDef{sizeof(uint32_t), 6, "u32", 0, {}, {}, {}},
|
|
TypeDef{sizeof(uint64_t), 7, "u64", 0, {}, {}, {}},
|
|
TypeDef{sizeof(bool), 8, "b", 0, {}, {}, {}},
|
|
TypeDef{sizeof(float), 9, "f32", 0, {}, {}, {}},
|
|
TypeDef{sizeof(double), 10, "f64", 0, {}, {}, {}},
|
|
TypeDef{sizeof(char), 11, "str", 0, {}, {}, {}},
|
|
TypeDef{sizeof(Vec2), 2667033957, "Vec2", 2, {9, 9}, {0, 0}, {{0, 1}, {1, 1}}},
|
|
TypeDef{sizeof(Vec3), 473740858, "Vec3", 3, {9, 9, 9}, {0, 0, 0}, {{2, 1}, {3, 1}, {4, 1}}},
|
|
TypeDef{sizeof(Vec4), 2507696603, "Vec4", 4, {9, 9, 9, 9}, {0, 0, 0, 0}, {{5, 1}, {6, 1}, {7, 1}, {8, 1}}},
|
|
TypeDef{sizeof(Mat3), 3364737048, "Mat3", 1, {9}, {9}, {{9, 1}}},
|
|
TypeDef{sizeof(Mat4), 1650094019, "Mat4", 1, {9}, {16}, {{10, 1}}},
|
|
TypeDef{sizeof(Transform), 4103530190, "Transform", 5, {16, 16, 13, 16, 13}, {0, 0, 0, 0, 0}, {{11, 1}, {12, 2}, {14, 8}, {22, 8}, {30, 5}}},
|
|
TypeDef{sizeof(AssetHandle), 2609735487, "AssetHandle", 1, {6}, {0}, {{35, 3}}},
|
|
TypeDef{sizeof(ModelHandle), 298089627, "ModelHandle", 2, {5, 18}, {0, 0}, {{38, 8}, {46, 5}}},
|
|
TypeDef{sizeof(TextureHandle), 1633273761, "TextureHandle", 2, {5, 18}, {0, 0}, {{51, 10}, {61, 5}}},
|
|
TypeDef{sizeof(PuzPos), 1834398141, "PuzPos", 2, {0, 0}, {0, 0}, {{66, 1}, {67, 1}}},
|
|
TypeDef{sizeof(StaticPuzzleCard), 3247750075, "StaticPuzzleCard", 8, {30, 19, 19, 19, 19, 19, 20, 20}, {4, 0, 0, 0, 0, 0, 0, 0}, {{68, 8}, {76, 15}, {91, 16}, {107, 15}, {122, 16}, {138, 15}, {153, 18}, {171, 18}}},
|
|
TypeDef{sizeof(StaticPuzzleCardHandle), 1742502768, "StaticPuzzleCardHandle", 1, {5}, {0}, {{189, 3}}},
|
|
TypeDef{sizeof(PuzzleVisualSettings), 2302077481, "PuzzleVisualSettings", 4, {14, 14, 13, 14}, {0, 0, 0, 0}, {{192, 13}, {205, 12}, {217, 4}, {221, 16}}},
|
|
TypeDef{sizeof(StaticPuzzleData), 2707133860, "StaticPuzzleData", 2, {22, 24}, {64, 0}, {{237, 5}, {242, 7}}},
|
|
TypeDef{sizeof(PuzzleCardStack), 53538532, "PuzzleCardStack", 3, {23, 4, 4}, {0, 0, 0}, {{249, 7}, {256, 17}, {273, 9}}},
|
|
TypeDef{sizeof(PlacedPuzzleCard), 3555575973, "PlacedPuzzleCard", 4, {23, 21, 4, 8}, {0, 0, 0, 0}, {{282, 7}, {289, 8}, {297, 8}, {305, 8}}},
|
|
TypeDef{sizeof(PuzzleData), 3349686056, "PuzzleData", 10, {5, 11, 4, 4, 6, 26, 27, 30, 6, 21}, {0, 64, 0, 0, 0, 16, 256, 1024, 0, 16}, {{313, 2}, {315, 10}, {325, 10}, {335, 11}, {346, 18}, {364, 14}, {378, 11}, {389, 15}, {404, 17}, {421, 13}}},
|
|
TypeDef{sizeof(SavedEntityRenderData), 3172756855, "SavedEntityRenderData", 7, {14, 14, 17, 31, 20, 19, 8}, {0, 0, 0, 0, 0, 0, 0}, {{434, 9}, {443, 14}, {457, 2}, {459, 8}, {467, 7}, {474, 5}, {479, 7}}},
|
|
TypeDef{sizeof(PuzzleElementType::Enum), 2983807453, "PuzzleElementType", 0, {}, {}, {}},
|
|
TypeDef{sizeof(EMaterial::Enum), 2024002654, "EMaterial", 0, {}, {}, {}},
|
|
};
|
|
char MemberNameBuffer[64*64*64]{"xyxyzxyzwMMMMIPositionRotationScaleIdxModelIdxAssetTextureIdxAssetXYElementsBaseModelHandleNorthCoverHandleEastCoverHandleSouthCoverHandleWestCoverHandleModelTextureHandleBoardTextureHandleIdxTileBaseColorTileDotColorTestDisabledCardTintCardsVisualsRefCardMaxAvailableCountUsedCountRefCardPositionRotationIsLockedIDPuzzleNameWidthTilesHeightTilesAvailableCardCountAvailableCardsPlacedCardsBackgroundTilesGoalPositionCountGoalPositionsBaseColorHighlightColorTFMaterialTextureModelVisible"};
|
|
};
|
|
|
|
constexpr MetadataTable Metadata;
|
|
}
|
|
}
|