From e2b94b826dc75c4df4ccaa6a508aefcbbc79d0a9 Mon Sep 17 00:00:00 2001 From: Asuro Date: Mon, 10 Mar 2025 03:12:35 +0100 Subject: [PATCH] default values --- src/dependency/minidef/src/MiniDef.cpp | 35 ++++++++++++++++++++++---- src/dependency/minidef/src/MiniDef.h | 1 + src/game/mini.def | 21 ++++++++++------ src/gen/Generated.h | 18 +++++++------ 4 files changed, 55 insertions(+), 20 deletions(-) diff --git a/src/dependency/minidef/src/MiniDef.cpp b/src/dependency/minidef/src/MiniDef.cpp index 1f9befa..1f3701d 100644 --- a/src/dependency/minidef/src/MiniDef.cpp +++ b/src/dependency/minidef/src/MiniDef.cpp @@ -133,7 +133,7 @@ void DefinitionFile::WriteTypes(TemplateWriter& Template) { bx::snprintf(Array, sizeof(Array), "[%u]", ArraySize); } - Template.Write(WriteTemplates::StructField4, Type, t.FieldNames[fieldIdx], Array, "{}"); + Template.Write(WriteTemplates::StructField4, Type, t.FieldNames[fieldIdx], Array, t.FieldVaules[fieldIdx]); } Template.Write(WriteTemplates::StructEnd); } @@ -315,9 +315,14 @@ Parser::Result Parser::HandleType() return Error; } Def::Type& t = Definitions.Types[Definitions.TypeCount]; - CHECK(ReadName(t.Name)); + for (int32_t i = 0; i < Def::MaxFields; ++i) + { + bx::strCopy(t.FieldVaules[i], sizeof(t.FieldVaules[i]), "{}"); + } + CHECK(ReadName(t.Name)); CHECK(SkipWhitespace()); + CHECK(ExpectChar("{")); CHECK(SkipWhitespace()); @@ -336,7 +341,7 @@ Parser::Result Parser::HandleType() bool NewLine = false; CHECK(SkipWhitespace(&NewLine)); - if (!NewLine) + while (!NewLine) { Result Res; if (CmpAdvance("Arr", Res, true) && Res == Result::OK) @@ -345,9 +350,30 @@ Parser::Result Parser::HandleType() CHECK(ReadUint(t.FieldArraySizes[t.FieldCount])); CHECK(ExpectChar(")")); } + else if (CmpAdvance("Default", Res, true) && Res == OK) + { + CHECK(ExpectChar("(")); + CHECK(ExpectChar("\"")); + + int32_t Remaining = bx::min(GetRemaining(), (int32_t)BX_COUNTOF(Def::Type::FieldVaules[0])); + for (int32_t i = 0; i < Remaining; ++i) + { + if (*ReadPtr != '\\' && CmpAdvance("\"", Res)) break; + t.FieldVaules[t.FieldCount][i] = *ReadPtr; + ReadPtr++; + } + if (Res != OK) return Res; + CHECK(ExpectChar(")")); + } + else + { + LOG_ERROR(Line, "Unknown token!"); + ErrorLine(); + return Error; + } + CHECK(SkipWhitespace(&NewLine)); } - CHECK(SkipWhitespace()); t.FieldCount++; } Definitions.TypeCount++; @@ -529,7 +555,6 @@ Parser::Result Parser::ReadOptionalEnumValues(Def::Enum& Enum, int32_t EntryIdx) int32_t Remaining = GetRemaining(); for (int32_t i = 0; i < Remaining; ++i) { - if (CmpAdvance("\"", Res)) break; Enum.ExtraStringFields[extraIdx][EntryIdx][i] = *ReadPtr; ReadPtr++; diff --git a/src/dependency/minidef/src/MiniDef.h b/src/dependency/minidef/src/MiniDef.h index cde56f3..57dd1a3 100644 --- a/src/dependency/minidef/src/MiniDef.h +++ b/src/dependency/minidef/src/MiniDef.h @@ -88,6 +88,7 @@ namespace Def FieldType FieldTypes[MaxFields]; char FieldNames[MaxFields][MaxNameLength]; uint32_t FieldArraySizes[MaxFields]{0}; + char FieldVaules[MaxFields][128]{0}; char Name[MaxNameLength]{0}; }; diff --git a/src/game/mini.def b/src/game/mini.def index 1ce0039..667b1bb 100644 --- a/src/game/mini.def +++ b/src/game/mini.def @@ -24,18 +24,23 @@ enum PuzzleElementType(u8) type PuzzleNode { - PuzzleElementType PlacedTypes + PuzzleElementType PlacedTypes Arr(4) } type StaticPuzzleCard { - PuzzleNode Nodes Arr(8) - u16 ModelHandle + PuzzleNode Nodes Arr(4) + u16 ModelHandle } type StaticPuzzleCardHandle { - u16 Idx + u16 Idx Default("UINT16_MAX") +} + +type StaticPuzzleData +{ + StaticPuzzleCard Cards Arr(64) } type PuzzleCardStack @@ -58,10 +63,10 @@ type PuzzleData u8 WidthTiles u8 HeightTiles u32 AvailableCardCount - PuzzleCardStack AvailableCards Arr(8) + PuzzleCardStack AvailableCards Arr(16) u32 PlacedCardCount - PlacedPuzzleCard PlacedCards Arr(8) - PuzzleNode PlacedNodes Arr(8) + PlacedPuzzleCard PlacedCards Arr(256) + PuzzleNode PlacedNodes Arr(1024) u32 GoalPositionCount - ElemPos GoalPositions + ElemPos GoalPositions Arr(16) } diff --git a/src/gen/Generated.h b/src/gen/Generated.h index df759a2..a3b3749 100644 --- a/src/gen/Generated.h +++ b/src/gen/Generated.h @@ -52,16 +52,20 @@ namespace Generated }; struct PuzzleNode { - PuzzleElementType PlacedTypes = {}; + PuzzleElementType PlacedTypes[4] = {}; }; struct StaticPuzzleCard { - PuzzleNode Nodes[8] = {}; + PuzzleNode Nodes[4] = {}; uint16_t ModelHandle = {}; }; struct StaticPuzzleCardHandle { - uint16_t Idx = {}; + uint16_t Idx = UINT16_MAX; + }; + struct StaticPuzzleData + { + StaticPuzzleCard Cards[64] = {}; }; struct PuzzleCardStack { @@ -81,11 +85,11 @@ namespace Generated uint8_t WidthTiles = {}; uint8_t HeightTiles = {}; uint32_t AvailableCardCount = {}; - PuzzleCardStack AvailableCards[8] = {}; + PuzzleCardStack AvailableCards[16] = {}; uint32_t PlacedCardCount = {}; - PlacedPuzzleCard PlacedCards[8] = {}; - PuzzleNode PlacedNodes[8] = {}; + PlacedPuzzleCard PlacedCards[256] = {}; + PuzzleNode PlacedNodes[1024] = {}; uint32_t GoalPositionCount = {}; - ElemPos GoalPositions = {}; + ElemPos GoalPositions[16] = {}; }; }