From 29a3aaf2410329f8eb4ef52ae9efe76da3c28664 Mon Sep 17 00:00:00 2001 From: Asuro Date: Sun, 30 Mar 2025 20:47:09 +0200 Subject: [PATCH] puzzle ui --- src/game/Level.cpp | 27 +++++++++++++++++++-------- src/game/Puzzle.cpp | 5 +++++ src/game/Puzzle.h | 1 + src/game/Tools.cpp | 25 +++++++------------------ src/game/data/static/puzzle.dat | Bin 1856 -> 1856 bytes 5 files changed, 32 insertions(+), 26 deletions(-) diff --git a/src/game/Level.cpp b/src/game/Level.cpp index 1f6791e..a46e996 100644 --- a/src/game/Level.cpp +++ b/src/game/Level.cpp @@ -322,6 +322,7 @@ namespace Game Level& level = GetInstance().GameLevel; auto& window = GetShared().Window; auto& staticCards = Puzzle::GetStaticPuzzleData().Cards; + auto& visuals = Puzzle::GetStaticPuzzleData().Visuals; Transform& camTransform = GetInstance().Player.PlayerCamTransform; camTransform.UpdateMatrix(); @@ -360,8 +361,11 @@ namespace Game bool isValid = Puzzle::IsValid(card.RefCard); + // Tile tile.EData.Visible = true; tile.EData.ModelH = isValid ? staticCards[card.RefCard.Idx].ModelHandle : staticCards[0].ModelHandle; + tile.EData.DotColor = visuals.TileDotColor; + tile.EData.BaseColor = visuals.TileBaseColor; Vec3 cardPos = { (float)card.Position.X * Puzzle::Config::CardScaleWorld, @@ -375,10 +379,12 @@ namespace Game tile.EData.Transform.SetPosition(cardPos); bx::mtxRotateY(tile.EData.Transform.Rotation.M, card.Rotation * bx::kPi * 0.5f); + // Quad quad.EData.Visible = isValid; quad.EData.TextureHandle = isValid ? staticCards[card.RefCard.Idx].BoardTextureHandle : Gen::TextureHandle{}; - quad.EData.DotColor = card.IsLocked ? Vec4{0.0f, 0.0f, 0.0f, 0.0f} : Vec4{1.0f, 1.0f, 1.0f, 1.0f}; + quad.EData.DotColor = card.IsLocked ? Puzzle::GetStaticPuzzleData().Visuals.DisabledCardTint + : Vec4{1.0f, 1.0f, 1.0f, 1.0f}; quad.EData.Transform = boardTransform; quad.EData.Transform.TranslateLocal(Vec3{(float)card.Position.X, (float)card.Position.Y, 0.0f} * @@ -394,14 +400,20 @@ namespace Game camTransform.GetPosition(), mousePosWorld, quadPosWorld, quadXWorld, quadZWorld, intersectPos)) { Vec3 quadSpaceIntersect = quad.EData.Transform.GlobalToLocalPoint(intersectPos); - if (quadSpaceIntersect.x >= -1.0f && quadSpaceIntersect.x <= 1.0f && + if (isValid && quadSpaceIntersect.x >= -1.0f && quadSpaceIntersect.x <= 1.0f && quadSpaceIntersect.z >= -1.0f && quadSpaceIntersect.z <= 1.0f) { - if (isValid && !card.IsLocked && DraggedCard.X == -1 && - GetMouseButtonPressedNow(MouseButton::Left)) + if (!card.IsLocked && DraggedCard.X == -1) { - DraggedCard.X = x; - DraggedCard.Y = y; + if (GetMouseButtonPressedNow(MouseButton::Left)) + { + DraggedCard.X = x; + DraggedCard.Y = y; + } + if (GetMouseButtonPressedNow(MouseButton::Right)) + { + Puzzle::RotateCard(card); + } } } } @@ -421,8 +433,7 @@ namespace Game if (GetMouseButtonPressedNow(MouseButton::Right)) { - srcCard.Rotation += 1; - if (srcCard.Rotation >= 4) srcCard.Rotation = 0; + Puzzle::RotateCard(srcCard); } if (!GetMouseButton(MouseButton::Left)) diff --git a/src/game/Puzzle.cpp b/src/game/Puzzle.cpp index 06b73d0..3ab64fe 100644 --- a/src/game/Puzzle.cpp +++ b/src/game/Puzzle.cpp @@ -271,6 +271,11 @@ namespace Puzzle ImGui::InvisibleButton("cardbn", {Puzzle::Config::CardSize * UIPuzBoxSize, Puzzle::Config::CardSize * UIPuzBoxSize}); } + void RotateCard(PlacedPuzzleCard& card) + { + card.Rotation += 1; + if (card.Rotation >= 4) card.Rotation = 0; + } void WritePuzzleFilePath(char* buf, int32_t bufSize, uint16_t puzID) { diff --git a/src/game/Puzzle.h b/src/game/Puzzle.h index 75e04c8..a1f22dc 100644 --- a/src/game/Puzzle.h +++ b/src/game/Puzzle.h @@ -35,6 +35,7 @@ namespace Puzzle PuzzleElementType::Enum GetCardNodeAt(const StaticPuzzleCard& card, uint8_t rotation, int8_t x, int8_t y); PuzzleElementType::Enum& EditCardNodeAt(StaticPuzzleCard& card, uint8_t rotation, int8_t x, int8_t y); void DrawCard(const StaticPuzzleCard& card, uint8_t rotation, ImVec2 pos); + void RotateCard(PlacedPuzzleCard& card); // TODO: targetPos is of type CardPos bool ReturnPlacedCard(PuzzleData& obj, PuzPos targetPos); diff --git a/src/game/Tools.cpp b/src/game/Tools.cpp index 5117755..fb05288 100644 --- a/src/game/Tools.cpp +++ b/src/game/Tools.cpp @@ -197,24 +197,6 @@ namespace Tools Vec3 quadPos = level.UIQuads.Get({0}).EData.Transform.GetPosition(); ImGui::Text("%f %f %f", quadPos.x, quadPos.y, quadPos.z); - auto& puzzleVisuals = Puzzle::GetStaticPuzzleData().Visuals; - if (ImGui::ColorEdit3("Tile Base Color", &puzzleVisuals.TileBaseColor.x)) - { - auto& tiles = level.PuzzleTiles; - for (int32_t i = 0; i < tiles.Count; ++i) - { - tiles.Data[i].EData.BaseColor = puzzleVisuals.TileBaseColor; - } - } - if (ImGui::ColorEdit3("Tile Dot Color", &puzzleVisuals.TileDotColor.x)) - { - auto& tiles = level.PuzzleTiles; - for (int32_t i = 0; i < tiles.Count; ++i) - { - tiles.Data[i].EData.DotColor = puzzleVisuals.TileDotColor; - } - } - ImGui::Text("Shader log:"); ImGui::TextWrapped("%s", Game::GetShared().Dev.ShaderLog); } @@ -282,6 +264,7 @@ namespace Tools if (ImGui::Begin("Cards")) { Gen::StaticPuzzleData& staticData = Puzzle::GetStaticPuzzleData(); + if (ImGui::Button("Save")) { Puzzle::SaveStaticPuzzleData(); @@ -292,6 +275,12 @@ namespace Tools Puzzle::LoadStaticPuzzleData(); } + ImGui::Separator(); + + ImGui::ColorEdit3("Disabled Tint", &staticData.Visuals.DisabledCardTint.x); + ImGui::ColorEdit3("Tile Base Color", &staticData.Visuals.TileBaseColor.x); + ImGui::ColorEdit3("Tile Dot Color", &staticData.Visuals.TileDotColor.x); + for (int32_t i = 0; i < BX_COUNTOF(staticData.Cards); ++i) { ImGui::Separator(); diff --git a/src/game/data/static/puzzle.dat b/src/game/data/static/puzzle.dat index 3817268047e983b603af9b01db12476a8ac4b68e..055a0b0583b4e31fa544dddcf5e01c9e7e1744f7 100644 GIT binary patch delta 56 zcmX@WcYtq$0K0)|F{|CwR}XAsx&!SP7#JA3YQpSe3i!Yn#4pj4wvWB@!48B$d;s~n B5f}gf delta 43 VcmX@WcYtq$0Q