From 15dc65530da8310fd68dff22b212c577313b6ed8 Mon Sep 17 00:00:00 2001 From: Asuro Date: Mon, 19 May 2025 18:41:10 +0200 Subject: [PATCH] reset --- assets/textures/reset.png | 3 +++ src/game/Level.cpp | 19 +++++++++++++++++-- src/game/Level.h | 2 ++ src/game/Tools.cpp | 12 +++++++----- src/game/Tools.h | 4 ++-- src/game/data/static/puzzle.dat | Bin 19020 -> 19041 bytes src/game/data/static/uiconfig.dat | Bin 9384 -> 9670 bytes src/game/mini.def | 1 + src/gen/Generated.cpp | 12 ++++++++++++ src/gen/Generated.h | 5 +++-- src/textures/reset.ktx | 3 +++ 11 files changed, 50 insertions(+), 11 deletions(-) create mode 100644 assets/textures/reset.png create mode 100644 src/textures/reset.ktx diff --git a/assets/textures/reset.png b/assets/textures/reset.png new file mode 100644 index 0000000..49dd4ba --- /dev/null +++ b/assets/textures/reset.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a856d57d9c1b2de4223a59663d485d3db98a026f00d6a2c3862dcd55c1024ef5 +size 39884 diff --git a/src/game/Level.cpp b/src/game/Level.cpp index 499e297..f76fe81 100644 --- a/src/game/Level.cpp +++ b/src/game/Level.cpp @@ -383,6 +383,7 @@ namespace Game quad.EData.ModelH = GameRendering::Get().GetModelHandleFromPath("models/plane.glb"); } SolvedQuad = level.UIQuads.New(); + ResetQuad = level.UIQuads.New(); IsSetup = true; LOG("finished setup!"); } @@ -450,6 +451,7 @@ namespace Game UpdateMatrix(tileOriginTransform); Vec3 mousePosWorld = GetMousePosWorld(); + Vec3 quadPlaneIntersectPos; Puzzle::PuzzleSolver solver; EntityRenderData solvedData; @@ -462,10 +464,24 @@ namespace Game : solvedData.TextureHandle; solvedQuad.EData.Transform.Position = tileOriginTransform.Position; solvedQuad.EData.Transform.Rotation = camTransform.Rotation; - solvedQuad.EData.Transform.Scale = solvedData.Transform.Scale; TranslateLocal(solvedQuad.EData.Transform, solvedData.Transform.Position); Rotate(solvedQuad.EData.Transform, Vec3{bx::kPi * 0.5f, 0.0f, (1.0f - 0 * 0.5f) * bx::kPi}); + EntityRenderData resetData; + resetData.LoadFromSaved(GetInstance().Player.Config.TabletResetRenderData); + auto& resetQuad = level.UIQuads.Get(ResetQuad); + resetQuad.EData = resetData; + resetQuad.EData.Visible = IsActive; + resetQuad.EData.Transform.Position = tileOriginTransform.Position; + resetQuad.EData.Transform.Rotation = camTransform.Rotation; + TranslateLocal(resetQuad.EData.Transform, resetData.Transform.Position); + Rotate(resetQuad.EData.Transform, Vec3{bx::kPi * 0.5f, 0.0f, (1.0f - 0 * 0.5f) * bx::kPi}); + if (GetMouseButtonPressedNow(MouseButton::Left) && + IsQuadHovered(resetQuad.EData.Transform, mousePosWorld, quadPlaneIntersectPos)) + { + // TODO + } + // Available Cards for (int32_t i = 0; i < Puzzle::Config::MaxAvailableStacks; ++i) { @@ -492,7 +508,6 @@ namespace Game if (j == 0) { - Vec3 quadPlaneIntersectPos; if (IsQuadHovered(quad.EData.Transform, mousePosWorld, quadPlaneIntersectPos) && DraggedAvailableCardIdx == UINT16_MAX && DraggedCard.X == -1 && GetMouseButtonPressedNow(MouseButton::Left)) diff --git a/src/game/Level.h b/src/game/Level.h index 854269d..eafef22 100644 --- a/src/game/Level.h +++ b/src/game/Level.h @@ -158,6 +158,7 @@ namespace Game UIQuadEntityHandle UIPlacedCards[Puzzle::Config::MaxCardsInPuzzle]; UIQuadEntityHandle UIAvailableCards[Puzzle::Config::MaxAvailableStacks * UIAvailableCardMaxStackPreview]; UIQuadEntityHandle SolvedQuad; + UIQuadEntityHandle ResetQuad; Gen::PuzPos DraggedCard{-1, -1}; uint16_t DraggedAvailableCardIdx = UINT16_MAX; bool IsSetup = false; @@ -165,6 +166,7 @@ namespace Game void Setup(); void Update(); + void Reset(); // TODO! }; class Level diff --git a/src/game/Tools.cpp b/src/game/Tools.cpp index 700df18..136abf2 100644 --- a/src/game/Tools.cpp +++ b/src/game/Tools.cpp @@ -52,12 +52,12 @@ namespace Tools return changed; } - bool ModelDropdown(Gen::ModelHandle& modelHandle, const char* name) + bool ModelDropdown(Gen::ModelHandle& modelHandle, const char* title) { bool changed = false; auto& R = Game::GameRendering::Get(); const char* assetName = GetAssetPath(modelHandle.Asset); - if (ImGui::BeginCombo(name, assetName)) + if (ImGui::BeginCombo(title, assetName)) { for (int32_t i = 0; i < R.ModelCount; ++i) { @@ -72,12 +72,12 @@ namespace Tools return changed; } - bool TextureDropdown(Gen::TextureHandle& texHandle) + bool TextureDropdown(Gen::TextureHandle& texHandle, const char* title) { bool changed = false; auto& R = Game::GameRendering::Get(); const char* name = GetAssetPath(texHandle.Asset); - if (ImGui::BeginCombo("Texture", name)) + if (ImGui::BeginCombo(title, name)) { for (int32_t i = 0; i < R.MaxTextures; ++i) { @@ -305,7 +305,9 @@ namespace Tools bTabletChanged |= Tools::EntityDataSettings(player.Config.TabletBackgroundRenderData); ImGui::Text("Status"); bTabletChanged |= Tools::EntityDataSettings(player.Config.TabletStatusRenderData); - bTabletChanged |= Tools::TextureDropdown(player.Config.TabletStatusSolvedTexture); + bTabletChanged |= Tools::TextureDropdown(player.Config.TabletStatusSolvedTexture, "Solved Texture"); + ImGui::Text("Reset"); + bTabletChanged |= Tools::EntityDataSettings(player.Config.TabletResetRenderData); if (bTabletChanged) { Serializer s; diff --git a/src/game/Tools.h b/src/game/Tools.h index 48b37a4..291b6da 100644 --- a/src/game/Tools.h +++ b/src/game/Tools.h @@ -5,8 +5,8 @@ namespace Tools { bool EntityDataSettings(Gen::SavedEntityRenderData& data); - bool ModelDropdown(Gen::ModelHandle& modelHandle, const char* name = "Model"); - bool TextureDropdown(Gen::TextureHandle& texHandle); + bool ModelDropdown(Gen::ModelHandle& modelHandle, const char* title = "Model"); + bool TextureDropdown(Gen::TextureHandle& texHandle, const char* title = "Texture"); bool MaterialDropdown(Gen::EMaterial::Enum& material); bool TransformUI(Gen::Transform& transform); void RenderDebugUI(Game::GameRendering& rendering); diff --git a/src/game/data/static/puzzle.dat b/src/game/data/static/puzzle.dat index 7108a9c94fc88bb6f532e592fef898240ce9b3af..f971f4939e27935803f5d52e91269b56d4ef6dec 100644 GIT binary patch delta 66 zcmX>zh4JAO#tCAK$s5Hhl|(}llX6l^f>Mh?L|#g2kxODp;^qlTW{iv+laDLUWn`b6 Vsxp_6YcjLyTt?2#3sqOE001I^7RUeq delta 68 zcmaDjh4IW3#tCAKejCLrmADuf7#Nrtc0AvlI+;;@+GJPdX^iZX?YZgTS diff --git a/src/game/data/static/uiconfig.dat b/src/game/data/static/uiconfig.dat index c8c989c159b2097959e15f94e8c64d84638ed034..cb1aba7d2fda3ae62aac05bbc3821a421aadb899 100644 GIT binary patch delta 230 zcmZ4CdCXfW)YI9Yk%5tcfx$Yod=di#AA^Ph14A+s1A_%KL~Npx11AduNDUJM<77tG zpZu&$QVjA;VhpBCk_>)Kq7w^0Z%$*MS*lzY(5&(}ACQkqW diff --git a/src/game/mini.def b/src/game/mini.def index c5cb55f..4c604c0 100644 --- a/src/game/mini.def +++ b/src/game/mini.def @@ -171,4 +171,5 @@ type SavedPlayerConfig SavedEntityRenderData TabletBackgroundRenderData SavedEntityRenderData TabletStatusRenderData TextureHandle TabletStatusSolvedTexture + SavedEntityRenderData TabletResetRenderData } diff --git a/src/gen/Generated.cpp b/src/gen/Generated.cpp index b92bd25..5f25d53 100644 --- a/src/gen/Generated.cpp +++ b/src/gen/Generated.cpp @@ -2453,6 +2453,7 @@ namespace Gen isOk = Save(&obj[i].TabletBackgroundRenderData, 1, serializer) && isOk; isOk = Save(&obj[i].TabletStatusRenderData, 1, serializer) && isOk; isOk = Save(&obj[i].TabletStatusSolvedTexture, 1, serializer) && isOk; + isOk = Save(&obj[i].TabletResetRenderData, 1, serializer) && isOk; } return isOk; } @@ -2472,6 +2473,7 @@ namespace Gen isOk = Load(&obj[i].TabletBackgroundRenderData, 1, serializer) && isOk; isOk = Load(&obj[i].TabletStatusRenderData, 1, serializer) && isOk; isOk = Load(&obj[i].TabletStatusSolvedTexture, 1, serializer) && isOk; + isOk = Load(&obj[i].TabletResetRenderData, 1, serializer) && isOk; } // if we're not ok here, something went really wrong assert(isOk); @@ -2511,6 +2513,10 @@ namespace Gen { WriteDestinations[i] = offsetof(SavedPlayerConfig, TabletStatusSolvedTexture); } + if (bx::strCmp(memberName, "TabletResetRenderData") == 0 && bx::strCmp(memberTypeName, "SavedEntityRenderData") == 0) + { + WriteDestinations[i] = offsetof(SavedPlayerConfig, TabletResetRenderData); + } } // Start reading in file order, skipping things that we don't know by name and type @@ -2549,6 +2555,12 @@ namespace Gen isOk = Load(fieldPtr, 1, serializer) && isOk; continue; } + if (bx::strCmp(memberName, "TabletResetRenderData") == 0) + { + auto* fieldPtr = reinterpret_cast(objBasePtr + WriteDestinations[j]); + isOk = Load(fieldPtr, 1, serializer) && isOk; + continue; + } assert(false); } } diff --git a/src/gen/Generated.h b/src/gen/Generated.h index 5b6452a..40bb742 100644 --- a/src/gen/Generated.h +++ b/src/gen/Generated.h @@ -225,6 +225,7 @@ namespace Gen SavedEntityRenderData TabletBackgroundRenderData = {}; SavedEntityRenderData TabletStatusRenderData = {}; TextureHandle TabletStatusSolvedTexture = {}; + SavedEntityRenderData TabletResetRenderData = {}; }; bool Save(const PuzzleElementType::Enum* obj, uint32_t count, Serializer& serializer); bool Load(PuzzleElementType::Enum* obj, uint32_t count, Deserializer& serializer); @@ -350,11 +351,11 @@ namespace Gen TypeDef{sizeof(PlacedPuzzleCard), 3555575973, "PlacedPuzzleCard", 4, {24, 21, 4, 8}, {0, 0, 0, 0}, {{313, 7}, {320, 8}, {328, 8}, {336, 8}}}, TypeDef{sizeof(PuzzleData), 3349686056, "PuzzleData", 10, {5, 11, 4, 4, 6, 27, 28, 32, 6, 21}, {0, 64, 0, 0, 0, 16, 256, 1024, 0, 16}, {{344, 2}, {346, 10}, {356, 10}, {366, 11}, {377, 18}, {395, 14}, {409, 11}, {420, 15}, {435, 17}, {452, 13}}}, TypeDef{sizeof(SavedEntityRenderData), 3172756855, "SavedEntityRenderData", 7, {14, 14, 17, 33, 20, 19, 8}, {0, 0, 0, 0, 0, 0, 0}, {{465, 9}, {474, 14}, {488, 2}, {490, 8}, {498, 7}, {505, 5}, {510, 7}}}, - TypeDef{sizeof(SavedPlayerConfig), 692059165, "SavedPlayerConfig", 3, {30, 30, 20}, {0, 0, 0}, {{517, 26}, {543, 22}, {565, 25}}}, + TypeDef{sizeof(SavedPlayerConfig), 2457294139, "SavedPlayerConfig", 4, {30, 30, 20, 30}, {0, 0, 0, 0}, {{517, 26}, {543, 22}, {565, 25}, {590, 21}}}, TypeDef{sizeof(PuzzleElementType::Enum), 2983807453, "PuzzleElementType", 0, {}, {}, {}}, TypeDef{sizeof(EMaterial::Enum), 2024002654, "EMaterial", 0, {}, {}, {}}, }; - char MemberNameBuffer[64*64*64]{"xyxyzxyzwMMMMIPositionRotationScaleIdxModelIdxAssetTextureIdxAssetXYModelConnectionDirectionElementsBaseModelHandleNorthCoverHandleEastCoverHandleSouthCoverHandleWestCoverHandleSocketsModelTextureHandleBoardTextureHandleIdxTileBaseColorTileDotColorTestDisabledCardTintCardsVisualsRefCardMaxAvailableCountUsedCountRefCardPositionRotationIsLockedIDPuzzleNameWidthTilesHeightTilesAvailableCardCountAvailableCardsPlacedCardsBackgroundTilesGoalPositionCountGoalPositionsBaseColorHighlightColorTFMaterialTextureModelVisibleTabletBackgroundRenderDataTabletStatusRenderDataTabletStatusSolvedTexture"}; + char MemberNameBuffer[64*64*64]{"xyxyzxyzwMMMMIPositionRotationScaleIdxModelIdxAssetTextureIdxAssetXYModelConnectionDirectionElementsBaseModelHandleNorthCoverHandleEastCoverHandleSouthCoverHandleWestCoverHandleSocketsModelTextureHandleBoardTextureHandleIdxTileBaseColorTileDotColorTestDisabledCardTintCardsVisualsRefCardMaxAvailableCountUsedCountRefCardPositionRotationIsLockedIDPuzzleNameWidthTilesHeightTilesAvailableCardCountAvailableCardsPlacedCardsBackgroundTilesGoalPositionCountGoalPositionsBaseColorHighlightColorTFMaterialTextureModelVisibleTabletBackgroundRenderDataTabletStatusRenderDataTabletStatusSolvedTextureTabletResetRenderData"}; }; constexpr MetadataTable Metadata; diff --git a/src/textures/reset.ktx b/src/textures/reset.ktx new file mode 100644 index 0000000..4af738a --- /dev/null +++ b/src/textures/reset.ktx @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:de597179b67de5f5ef3acfcf773660f1bdb4a2a0b38807c014f5c88b96a77cdc +size 4194372