diff --git a/src/dependency/minidef/src/CppGen.cpp b/src/dependency/minidef/src/CppGen.cpp index 86e5869..7b0f9cb 100644 --- a/src/dependency/minidef/src/CppGen.cpp +++ b/src/dependency/minidef/src/CppGen.cpp @@ -16,7 +16,6 @@ namespace WriteTemplates constexpr char FileHeaderStart[] = R"END(#pragma once #include -#include namespace Gen { @@ -47,7 +46,7 @@ namespace Gen constexpr char EnumHeader4[] = R"END( struct %s { - static constexpr uint16_t EnumIdx = %u; + static constexpr uint16_t TypeIdx = %u; static constexpr int32_t EntryCount = %u; enum Enum : %s { @@ -221,12 +220,6 @@ namespace Gen StrRef MemberNameIndices[64]{0}; }; - struct EnumDef - { - uint32_t Size = 0; - uint32_t Hash = 0; - }; - struct MetadataTable { TypeDef TypeDefinitions[%u] @@ -234,12 +227,6 @@ namespace Gen )END"; constexpr char MetadataTypeEntry6[] = R"END( TypeDef{sizeof(%s), %u, "%s", %u, {%s}, {%s}}, -)END"; - constexpr char MetadataEnumStart1[] = R"END( }; - EnumDef EnumDefinitions[%u] - { -)END"; - constexpr char MetadataEnumEntry2[] = R"END( EnumDef{sizeof(%s::Enum), %u}, )END"; constexpr char MetadataEnd1[] = R"END( }; char MemberNameBuffer[64*64*64]{"%s"}; @@ -300,7 +287,8 @@ void CppFileWriter::WriteInternal(WriteBuffer& buf, const char* templateStr, va_ buf.WrittenBytes += bx::vsnprintf(&buf.Data[buf.WrittenBytes], BufferRequestSize, templateStr, args); } -void CppFileWriter::PrintTypeName(char* buf, int32_t bufSize, Def::TypeRef type, const Def::DefinitionFile& definitions) +void CppFileWriter::PrintTypeName( + char* buf, int32_t bufSize, Def::TypeRef type, const Def::DefinitionFile& definitions, bool printActualEnumType) { if (buf == nullptr || bufSize == 0 || !IsValid(type)) { @@ -322,7 +310,10 @@ void CppFileWriter::PrintTypeName(char* buf, int32_t bufSize, Def::TypeRef type, else if (type.FieldKind == Def::EFieldType::DefinedEnum) { bx::strCopy(buf, bufSize, definitions.Enums[type.TypeIdx].Name); - bx::strCat(buf, bufSize, "::Enum"); + if (printActualEnumType) + { + bx::strCat(buf, bufSize, "::Enum"); + } } } @@ -340,7 +331,7 @@ void CppFileWriter::WriteEnums(const Def::DefinitionFile& definitions) char Buf[Def::MaxNameLength]{0}; PrintTypeName(Buf, sizeof(Buf), e.EnumType, definitions); - Write(WriteTemplates::EnumHeader4, e.Name, enumIdx, e.EntryCount, Buf); + Write(WriteTemplates::EnumHeader4, e.Name, definitions.TypeCount + enumIdx, e.EntryCount, Buf); for (int32_t entryIdx = 0; entryIdx < e.EntryCount; ++entryIdx) { Write(WriteTemplates::EnumField1, e.EntryNames[entryIdx]); @@ -458,7 +449,7 @@ void CppFileWriter::WriteSaveLoadMethods(const Def::DefinitionFile& definitions) for (int32_t fieldIdx = 0; fieldIdx < t.FieldCount; ++fieldIdx) { const char* fieldName = t.FieldNames[fieldIdx]; - PrintTypeName(fieldTypeName, sizeof(fieldTypeName), t.FieldTypes[fieldIdx], definitions); + PrintTypeName(fieldTypeName, sizeof(fieldTypeName), t.FieldTypes[fieldIdx], definitions, false); WriteCpp(WriteTemplates::LoadFuncBodyMemberCheck4, fieldName, fieldTypeName, typeName, fieldName); } WriteCpp(WriteTemplates::LoadFuncBodyTypeUpgradeStart); @@ -483,7 +474,7 @@ namespace void CppFileWriter::WriteMetadata(const Def::DefinitionFile& definitions) { uint32_t memberNameBufferIdx = 0; - Write(WriteTemplates::MetadataStart1, definitions.TypeCount); + Write(WriteTemplates::MetadataStart1, definitions.TypeCount + definitions.EnumCount); for (uint16_t i = 0; i < definitions.TypeCount; ++i) { auto& type = definitions.Types[i]; @@ -493,7 +484,9 @@ void CppFileWriter::WriteMetadata(const Def::DefinitionFile& definitions) { if (j != 0) bx::strCat(fieldStr, sizeof(fieldStr), ", "); char numBuf[8]{0}; - bx::snprintf(numBuf, sizeof(numBuf), "%u", type.FieldTypes[j].TypeIdx); + int32_t idx = type.FieldTypes[j].TypeIdx; + if (type.FieldTypes[j].FieldKind == Def::EFieldType::DefinedEnum) idx += definitions.TypeCount; + bx::snprintf(numBuf, sizeof(numBuf), "%u", idx); bx::strCat(fieldStr, sizeof(fieldStr), numBuf); } @@ -515,10 +508,14 @@ void CppFileWriter::WriteMetadata(const Def::DefinitionFile& definitions) Write( WriteTemplates::MetadataTypeEntry6, typeStr, type.Hash, type.Name, type.FieldCount, fieldStr, memberIdxStr); } - Write(WriteTemplates::MetadataEnumStart1, definitions.EnumCount); - for (int32_t i = 0; i < definitions.EnumCount; ++i) + for (uint16_t i = 0; i < definitions.EnumCount; ++i) { - Write(WriteTemplates::MetadataEnumEntry2, definitions.Enums[i].Name, definitions.Enums[i].Hash); + auto& enumType = definitions.Enums[i]; + + char typeStr[Def::MaxNameLength]{0}; + PrintTypeName(typeStr, sizeof(typeStr), {i, Def::EFieldType::DefinedEnum}, definitions); + + Write(WriteTemplates::MetadataTypeEntry6, typeStr, enumType.Hash, enumType.Name, 0, "", ""); } Write(WriteTemplates::MetadataEnd1, MemberNameBuffer); } diff --git a/src/dependency/minidef/src/CppGen.h b/src/dependency/minidef/src/CppGen.h index 4ceb3c6..00327bf 100644 --- a/src/dependency/minidef/src/CppGen.h +++ b/src/dependency/minidef/src/CppGen.h @@ -21,7 +21,11 @@ struct CppFileWriter void WriteInternal(WriteBuffer& buf, const char* templateStr, va_list args); public: - void PrintTypeName(char* buf, int32_t bufSize, Def::TypeRef type, const Def::DefinitionFile& definitions); + void PrintTypeName(char* buf, + int32_t bufSize, + Def::TypeRef type, + const Def::DefinitionFile& definitions, + bool printActualEnumType = true); void WriteEnums(const Def::DefinitionFile& definitions); void WriteTypes(const Def::DefinitionFile& definitions); void WriteSaveLoadMethods(const Def::DefinitionFile& definitions); diff --git a/src/game/Level.cpp b/src/game/Level.cpp index f0b5032..817b83e 100644 --- a/src/game/Level.cpp +++ b/src/game/Level.cpp @@ -111,6 +111,8 @@ namespace Game needReset |= LevelEntities.Setup(storagePtr, needReset); Puzzle::Setup(); + UIQuads.Count = 0; + PuzzleTiles.Count = 0; bx::Error err; bx::DirectoryReader dirIter; diff --git a/src/game/mini.def b/src/game/mini.def index 9459712..5abcf28 100644 --- a/src/game/mini.def +++ b/src/game/mini.def @@ -86,6 +86,7 @@ type StaticPuzzleCard { PuzzleElementType Elements Arr(4) ModelHandle ModelHandle + TextureHandle ModelTextureHandle TextureHandle BoardTextureHandle } diff --git a/src/gen/Generated.cpp b/src/gen/Generated.cpp index dc86184..9409464 100644 --- a/src/gen/Generated.cpp +++ b/src/gen/Generated.cpp @@ -1272,6 +1272,7 @@ namespace Gen { isOk = Save(obj[i].Elements, 4, serializer) && isOk; isOk = Save(&obj[i].ModelHandle, 1, serializer) && isOk; + isOk = Save(&obj[i].ModelTextureHandle, 1, serializer) && isOk; isOk = Save(&obj[i].BoardTextureHandle, 1, serializer) && isOk; } return isOk; @@ -1291,6 +1292,7 @@ namespace Gen { isOk = Load(obj[i].Elements, 4, serializer) && isOk; isOk = Load(&obj[i].ModelHandle, 1, serializer) && isOk; + isOk = Load(&obj[i].ModelTextureHandle, 1, serializer) && isOk; isOk = Load(&obj[i].BoardTextureHandle, 1, serializer) && isOk; } // if we're not ok here, something went really wrong @@ -1319,7 +1321,7 @@ namespace Gen { const bx::StringView memberName = {&serializer.MemberNameBuf[matchedDef.MemberNameIndices[i].Offset], matchedDef.MemberNameIndices[i].Size}; const char* memberTypeName = serializer.TypeBuf.Defs[matchedDef.ChildIndices[i]].Name; - if (bx::strCmp(memberName, "Elements") == 0 && bx::strCmp(memberTypeName, "PuzzleElementType::Enum") == 0) + if (bx::strCmp(memberName, "Elements") == 0 && bx::strCmp(memberTypeName, "PuzzleElementType") == 0) { WriteDestinations[i] = offsetof(StaticPuzzleCard, Elements); } @@ -1327,6 +1329,10 @@ namespace Gen { WriteDestinations[i] = offsetof(StaticPuzzleCard, ModelHandle); } + if (bx::strCmp(memberName, "ModelTextureHandle") == 0 && bx::strCmp(memberTypeName, "TextureHandle") == 0) + { + WriteDestinations[i] = offsetof(StaticPuzzleCard, ModelTextureHandle); + } if (bx::strCmp(memberName, "BoardTextureHandle") == 0 && bx::strCmp(memberTypeName, "TextureHandle") == 0) { WriteDestinations[i] = offsetof(StaticPuzzleCard, BoardTextureHandle); @@ -1362,6 +1368,12 @@ namespace Gen isOk = Load(fieldPtr, 1, serializer) && isOk; continue; } + if (bx::strCmp(memberName, "ModelTextureHandle") == 0) + { + auto* fieldPtr = reinterpret_cast(objBasePtr + WriteDestinations[j]); + isOk = Load(fieldPtr, 1, serializer) && isOk; + continue; + } if (bx::strCmp(memberName, "BoardTextureHandle") == 0) { auto* fieldPtr = reinterpret_cast(objBasePtr + WriteDestinations[j]); @@ -2003,7 +2015,7 @@ namespace Gen { WriteDestinations[i] = offsetof(PuzzleData, PlacedCards); } - if (bx::strCmp(memberName, "BackgroundTiles") == 0 && bx::strCmp(memberTypeName, "PuzzleElementType::Enum") == 0) + if (bx::strCmp(memberName, "BackgroundTiles") == 0 && bx::strCmp(memberTypeName, "PuzzleElementType") == 0) { WriteDestinations[i] = offsetof(PuzzleData, BackgroundTiles); } @@ -2174,7 +2186,7 @@ namespace Gen { WriteDestinations[i] = offsetof(SavedEntityRenderData, TF); } - if (bx::strCmp(memberName, "Material") == 0 && bx::strCmp(memberTypeName, "EMaterial::Enum") == 0) + if (bx::strCmp(memberName, "Material") == 0 && bx::strCmp(memberTypeName, "EMaterial") == 0) { WriteDestinations[i] = offsetof(SavedEntityRenderData, Material); } diff --git a/src/gen/Generated.h b/src/gen/Generated.h index b486bfe..3612af0 100644 --- a/src/gen/Generated.h +++ b/src/gen/Generated.h @@ -1,6 +1,5 @@ #pragma once #include -#include namespace Gen { @@ -8,7 +7,7 @@ namespace Gen struct Deserializer; struct PuzzleElementType { - static constexpr uint16_t EnumIdx = 0; + static constexpr uint16_t TypeIdx = 30; static constexpr int32_t EntryCount = 8; enum Enum : uint8_t { @@ -57,7 +56,7 @@ namespace Gen }; struct EMaterial { - static constexpr uint16_t EnumIdx = 1; + static constexpr uint16_t TypeIdx = 31; static constexpr int32_t EntryCount = 2; enum Enum : int32_t { @@ -147,6 +146,7 @@ namespace Gen static constexpr uint16_t TypeIdx = 22; PuzzleElementType::Enum Elements[4] = {}; ModelHandle ModelHandle = {}; + TextureHandle ModelTextureHandle = {}; TextureHandle BoardTextureHandle = {}; }; struct StaticPuzzleCardHandle @@ -290,15 +290,9 @@ namespace Gen StrRef MemberNameIndices[64]{0}; }; - struct EnumDef - { - uint32_t Size = 0; - uint32_t Hash = 0; - }; - struct MetadataTable { - TypeDef TypeDefinitions[30] + TypeDef TypeDefinitions[32] { TypeDef{sizeof(int8_t), 0, "i8", 0, {}, {}}, TypeDef{sizeof(int16_t), 1, "i16", 0, {}, {}}, @@ -322,21 +316,18 @@ namespace Gen TypeDef{sizeof(ModelHandle), 298089627, "ModelHandle", 2, {5, 18}, {{38, 8}, {46, 5}}}, TypeDef{sizeof(TextureHandle), 1633273761, "TextureHandle", 2, {5, 18}, {{51, 10}, {61, 5}}}, TypeDef{sizeof(PuzPos), 1834398141, "PuzPos", 2, {0, 0}, {{66, 1}, {67, 1}}}, - TypeDef{sizeof(StaticPuzzleCard), 3413177578, "StaticPuzzleCard", 3, {0, 19, 20}, {{68, 8}, {76, 11}, {87, 18}}}, - TypeDef{sizeof(StaticPuzzleCardHandle), 1742502768, "StaticPuzzleCardHandle", 1, {5}, {{105, 3}}}, - TypeDef{sizeof(PuzzleVisualSettings), 2302077481, "PuzzleVisualSettings", 4, {14, 14, 13, 14}, {{108, 13}, {121, 12}, {133, 4}, {137, 16}}}, - TypeDef{sizeof(StaticPuzzleData), 3618749873, "StaticPuzzleData", 2, {22, 24}, {{153, 5}, {158, 7}}}, - TypeDef{sizeof(PuzzleCardStack), 53538532, "PuzzleCardStack", 3, {23, 4, 4}, {{165, 7}, {172, 17}, {189, 9}}}, - TypeDef{sizeof(PlacedPuzzleCard), 3555575973, "PlacedPuzzleCard", 4, {23, 21, 4, 8}, {{198, 7}, {205, 8}, {213, 8}, {221, 8}}}, - TypeDef{sizeof(PuzzleData), 3349686056, "PuzzleData", 10, {5, 11, 4, 4, 6, 26, 27, 0, 6, 21}, {{229, 2}, {231, 10}, {241, 10}, {251, 11}, {262, 18}, {280, 14}, {294, 11}, {305, 15}, {320, 17}, {337, 13}}}, - TypeDef{sizeof(SavedEntityRenderData), 3172756855, "SavedEntityRenderData", 7, {14, 14, 17, 1, 20, 19, 8}, {{350, 9}, {359, 14}, {373, 2}, {375, 8}, {383, 7}, {390, 5}, {395, 7}}}, + TypeDef{sizeof(StaticPuzzleCard), 1466565767, "StaticPuzzleCard", 4, {30, 19, 20, 20}, {{68, 8}, {76, 11}, {87, 18}, {105, 18}}}, + TypeDef{sizeof(StaticPuzzleCardHandle), 1742502768, "StaticPuzzleCardHandle", 1, {5}, {{123, 3}}}, + TypeDef{sizeof(PuzzleVisualSettings), 2302077481, "PuzzleVisualSettings", 4, {14, 14, 13, 14}, {{126, 13}, {139, 12}, {151, 4}, {155, 16}}}, + TypeDef{sizeof(StaticPuzzleData), 1131370538, "StaticPuzzleData", 2, {22, 24}, {{171, 5}, {176, 7}}}, + TypeDef{sizeof(PuzzleCardStack), 53538532, "PuzzleCardStack", 3, {23, 4, 4}, {{183, 7}, {190, 17}, {207, 9}}}, + TypeDef{sizeof(PlacedPuzzleCard), 3555575973, "PlacedPuzzleCard", 4, {23, 21, 4, 8}, {{216, 7}, {223, 8}, {231, 8}, {239, 8}}}, + TypeDef{sizeof(PuzzleData), 3349686056, "PuzzleData", 10, {5, 11, 4, 4, 6, 26, 27, 30, 6, 21}, {{247, 2}, {249, 10}, {259, 10}, {269, 11}, {280, 18}, {298, 14}, {312, 11}, {323, 15}, {338, 17}, {355, 13}}}, + TypeDef{sizeof(SavedEntityRenderData), 3172756855, "SavedEntityRenderData", 7, {14, 14, 17, 31, 20, 19, 8}, {{368, 9}, {377, 14}, {391, 2}, {393, 8}, {401, 7}, {408, 5}, {413, 7}}}, + TypeDef{sizeof(PuzzleElementType::Enum), 2983807453, "PuzzleElementType", 0, {}, {}}, + TypeDef{sizeof(EMaterial::Enum), 2024002654, "EMaterial", 0, {}, {}}, }; - EnumDef EnumDefinitions[2] - { - EnumDef{sizeof(PuzzleElementType::Enum), 2983807453}, - EnumDef{sizeof(EMaterial::Enum), 2024002654}, - }; - char MemberNameBuffer[64*64*64]{"xyxyzxyzwMMMMIPositionRotationScaleIdxModelIdxAssetTextureIdxAssetXYElementsModelHandleBoardTextureHandleIdxTileBaseColorTileDotColorTestDisabledCardTintCardsVisualsRefCardMaxAvailableCountUsedCountRefCardPositionRotationIsLockedIDPuzzleNameWidthTilesHeightTilesAvailableCardCountAvailableCardsPlacedCardsBackgroundTilesGoalPositionCountGoalPositionsBaseColorHighlightColorTFMaterialTextureModelVisible"}; + char MemberNameBuffer[64*64*64]{"xyxyzxyzwMMMMIPositionRotationScaleIdxModelIdxAssetTextureIdxAssetXYElementsModelHandleModelTextureHandleBoardTextureHandleIdxTileBaseColorTileDotColorTestDisabledCardTintCardsVisualsRefCardMaxAvailableCountUsedCountRefCardPositionRotationIsLockedIDPuzzleNameWidthTilesHeightTilesAvailableCardCountAvailableCardsPlacedCardsBackgroundTilesGoalPositionCountGoalPositionsBaseColorHighlightColorTFMaterialTextureModelVisible"}; }; constexpr MetadataTable Metadata;