wip
This commit is contained in:
@@ -180,6 +180,13 @@ namespace Game
|
|||||||
Cubes.Get(PlayerOutsideViewCube).Setup();
|
Cubes.Get(PlayerOutsideViewCube).Setup();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
Deserializer d;
|
||||||
|
d.Init("game/data/static/uiconfig.dat", "UICO");
|
||||||
|
d.ReadT(GetInstance().Player.Config);
|
||||||
|
d.Finish();
|
||||||
|
}
|
||||||
|
|
||||||
UIQuads.Count = 0;
|
UIQuads.Count = 0;
|
||||||
PuzzleTiles.Count = 0;
|
PuzzleTiles.Count = 0;
|
||||||
PuzzleTileCovers.Count = 0;
|
PuzzleTileCovers.Count = 0;
|
||||||
@@ -190,16 +197,10 @@ namespace Game
|
|||||||
Puzzles[i].Setup();
|
Puzzles[i].Setup();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
PuzzleUI.Setup();
|
PuzzleUI.Setup();
|
||||||
TabletHandle = UIQuads.New();
|
TabletHandle = UIQuads.New();
|
||||||
UpdatePlayerInputMode();
|
UpdatePlayerInputMode();
|
||||||
|
|
||||||
{
|
|
||||||
Deserializer d;
|
|
||||||
d.Init("game/data/static/uiconfig.dat", "UICO");
|
|
||||||
d.ReadT(GetInstance().Player.Config);
|
|
||||||
d.Finish();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void Level::Update()
|
void Level::Update()
|
||||||
|
|||||||
@@ -377,6 +377,45 @@ namespace Puzzle
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void RecalculateInitialAvailable(PuzzleData& obj)
|
||||||
|
{
|
||||||
|
for (int32_t i = 0; i < obj.AvailableCardCount; ++i)
|
||||||
|
{
|
||||||
|
obj.AvailableCards[i].UsedCount = obj.AvailableCards[i].MaxAvailableCount;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int32_t y = 0; y < obj.HeightTiles; ++y)
|
||||||
|
{
|
||||||
|
for (int32_t x = 0; x < obj.WidthTiles; ++x)
|
||||||
|
{
|
||||||
|
auto& placedCard = obj.PlacedCards[y * Puzzle::Config::MaxPuzzleSizeCards + x];
|
||||||
|
if (Puzzle::IsValid(placedCard.RefCard))
|
||||||
|
{
|
||||||
|
bool found = false;
|
||||||
|
for (int32_t i = 0; i < obj.AvailableCardCount; ++i)
|
||||||
|
{
|
||||||
|
if (obj.AvailableCards[i].RefCard.Idx == placedCard.RefCard.Idx)
|
||||||
|
{
|
||||||
|
found = true;
|
||||||
|
obj.AvailableCards[i].MaxAvailableCount++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!found)
|
||||||
|
{
|
||||||
|
if (obj.AvailableCardCount == Puzzle::Config::MaxAvailableStacks)
|
||||||
|
{
|
||||||
|
LOG_ERROR("Read limit of available card stacks!");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
obj.AvailableCards[obj.AvailableCardCount] = {};
|
||||||
|
obj.AvailableCards[obj.AvailableCardCount].RefCard = placedCard.RefCard;
|
||||||
|
obj.AvailableCards[obj.AvailableCardCount].MaxAvailableCount = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
bool RenderDebugUI(PuzzleData& obj)
|
bool RenderDebugUI(PuzzleData& obj)
|
||||||
{
|
{
|
||||||
bool isVisible = true;
|
bool isVisible = true;
|
||||||
@@ -485,6 +524,7 @@ namespace Puzzle
|
|||||||
{
|
{
|
||||||
placedCard.Flags =
|
placedCard.Flags =
|
||||||
(PlacedPuzzleCardFlags::Enum)(placedCard.Flags ^ PlacedPuzzleCardFlags::Locked);
|
(PlacedPuzzleCardFlags::Enum)(placedCard.Flags ^ PlacedPuzzleCardFlags::Locked);
|
||||||
|
RecalculateInitialAvailable(obj);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!isLocked && IsValid(placedCard.RefCard))
|
if (!isLocked && IsValid(placedCard.RefCard))
|
||||||
@@ -506,6 +546,7 @@ namespace Puzzle
|
|||||||
placedCard.Position = cardPos;
|
placedCard.Position = cardPos;
|
||||||
placedCard.Flags = (PlacedPuzzleCardFlags::Enum)SetFlags(placedCard.Flags,
|
placedCard.Flags = (PlacedPuzzleCardFlags::Enum)SetFlags(placedCard.Flags,
|
||||||
PlacedPuzzleCardFlags::Locked);
|
PlacedPuzzleCardFlags::Locked);
|
||||||
|
RecalculateInitialAvailable(obj);
|
||||||
}
|
}
|
||||||
ImGui::EndDragDropTarget();
|
ImGui::EndDragDropTarget();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -112,36 +112,39 @@ namespace Game
|
|||||||
Vec3 quadPlaneIntersectPos;
|
Vec3 quadPlaneIntersectPos;
|
||||||
Vec3 mousePosWorld = GetMousePosWorld();
|
Vec3 mousePosWorld = GetMousePosWorld();
|
||||||
|
|
||||||
for (int32_t i = 0; i < Puzzle::Config::MaxAvailableStacks; ++i)
|
for (int32_t stackIdx = 0; stackIdx < Puzzle::Config::MaxAvailableStacks; ++stackIdx)
|
||||||
{
|
{
|
||||||
auto& card = Data.AvailableCards[i];
|
auto& card = Data.AvailableCards[stackIdx];
|
||||||
for (int32_t j = 0; j < UIAvailableCardMaxStackPreview; j++)
|
for (int32_t cardIdx = 0; cardIdx < UIAvailableCardMaxStackPreview; cardIdx++)
|
||||||
{
|
{
|
||||||
auto h = UIAvailableCards[i * UIAvailableCardMaxStackPreview + j];
|
auto h = UIAvailableCards[stackIdx * UIAvailableCardMaxStackPreview + cardIdx];
|
||||||
auto& quad = level.UIQuads.Get(h);
|
auto& quad = level.UIQuads.Get(h);
|
||||||
int32_t remaining = (int32_t)card.MaxAvailableCount - (int32_t)card.UsedCount;
|
int32_t remaining = (int32_t)card.MaxAvailableCount - (int32_t)card.UsedCount;
|
||||||
if (i < Data.AvailableCardCount && j < remaining)
|
if (stackIdx < Data.AvailableCardCount && cardIdx < remaining)
|
||||||
{
|
{
|
||||||
quad.UIPos = Vec3{j * 0.05f + i * 1.2f, 4.2f + (j % 2 == 0 ? 0.02f : 0.0f), j * 0.001f} *
|
quad.UIPos = Vec3{cardIdx * 0.05f + stackIdx * 1.2f,
|
||||||
|
4.2f + (cardIdx % 2 == 0 ? 0.02f : 0.0f),
|
||||||
|
cardIdx * 0.001f} *
|
||||||
UICardOffset * UICardScale;
|
UICardOffset * UICardScale;
|
||||||
UpdateQuad(level.UIQuads, h);
|
UpdateQuad(level.UIQuads, h);
|
||||||
quad.EData.Visible = true;
|
quad.EData.Visible = true;
|
||||||
quad.EData.TextureHandle = Puzzle::IsValid(Data.AvailableCards[i].RefCard)
|
quad.EData.TextureHandle = Puzzle::IsValid(card.RefCard)
|
||||||
? staticCards[Data.AvailableCards[i].RefCard.Idx].BoardTextureHandle
|
? staticCards[card.RefCard.Idx].BoardTextureHandle
|
||||||
: Gen::TextureHandle{};
|
: Gen::TextureHandle{0};
|
||||||
|
quad.EData.TextureHandle = {4};
|
||||||
quad.EData.Transform.Scale = {UICardScale, UICardScale, UICardScale};
|
quad.EData.Transform.Scale = {UICardScale, UICardScale, UICardScale};
|
||||||
quad.EData.DotColor = {1.0f, 1.0f, 1.0f, 1.0f};
|
quad.EData.DotColor = {1.0f, 1.0f, 1.0f, 1.0f};
|
||||||
quad.EData.BaseColor = {1.0f, 1.0f, 1.0f, 1.0f};
|
quad.EData.BaseColor = {1.0f, 1.0f, 1.0f, 1.0f};
|
||||||
|
|
||||||
if (j == 0)
|
if (cardIdx == 0)
|
||||||
{
|
{
|
||||||
if (IsQuadHovered(quad.EData.Transform, mousePosWorld, quadPlaneIntersectPos) &&
|
if (IsQuadHovered(quad.EData.Transform, mousePosWorld, quadPlaneIntersectPos) &&
|
||||||
DraggedAvailableCardIdx == UINT16_MAX && DraggedCard.X == -1 &&
|
DraggedAvailableCardIdx == UINT16_MAX && DraggedCard.X == -1 &&
|
||||||
GetMouseButtonPressedNow(MouseButton::Left))
|
GetMouseButtonPressedNow(MouseButton::Left))
|
||||||
{
|
{
|
||||||
DraggedAvailableCardIdx = i;
|
DraggedAvailableCardIdx = stackIdx;
|
||||||
}
|
}
|
||||||
if (DraggedAvailableCardIdx == i)
|
if (DraggedAvailableCardIdx == stackIdx)
|
||||||
{
|
{
|
||||||
Vec3 dragPos = quadPlaneIntersectPos;
|
Vec3 dragPos = quadPlaneIntersectPos;
|
||||||
dragPos += StaticData.ZAxis * -0.01f;
|
dragPos += StaticData.ZAxis * -0.01f;
|
||||||
@@ -180,6 +183,7 @@ namespace Game
|
|||||||
|
|
||||||
Vec3 CalcBoardOffset(const Gen::PuzzleData& puzData)
|
Vec3 CalcBoardOffset(const Gen::PuzzleData& puzData)
|
||||||
{
|
{
|
||||||
|
return {};
|
||||||
return Vec3{
|
return Vec3{
|
||||||
(float)(puzData.WidthTiles) / (2.0f * Puzzle::Config::CardSize),
|
(float)(puzData.WidthTiles) / (2.0f * Puzzle::Config::CardSize),
|
||||||
(float)(puzData.HeightTiles) / (2.0f * Puzzle::Config::CardSize),
|
(float)(puzData.HeightTiles) / (2.0f * Puzzle::Config::CardSize),
|
||||||
@@ -244,6 +248,15 @@ namespace Game
|
|||||||
Vec3 boardTilePos = boardPos / UICardOffset;
|
Vec3 boardTilePos = boardPos / UICardOffset;
|
||||||
int32_t xPos = (int32_t)bx::round(boardTilePos.x);
|
int32_t xPos = (int32_t)bx::round(boardTilePos.x);
|
||||||
int32_t yPos = (int32_t)bx::round(boardTilePos.y);
|
int32_t yPos = (int32_t)bx::round(boardTilePos.y);
|
||||||
|
LOG("boardPos: %f %f %f, offset: %f %f %f, xy: %i %i",
|
||||||
|
boardPos.x,
|
||||||
|
boardPos.y,
|
||||||
|
boardPos.z,
|
||||||
|
boardOffset.x,
|
||||||
|
boardOffset.y,
|
||||||
|
boardOffset.z,
|
||||||
|
xPos,
|
||||||
|
yPos);
|
||||||
Gen::PuzPos srcCardPos = {(int8_t)DraggedCard.X, (int8_t)DraggedCard.Y};
|
Gen::PuzPos srcCardPos = {(int8_t)DraggedCard.X, (int8_t)DraggedCard.Y};
|
||||||
Gen::PlacedPuzzleCard& srcCard =
|
Gen::PlacedPuzzleCard& srcCard =
|
||||||
Data.PlacedCards[srcCardPos.Y * Puzzle::Config::MaxPuzzleSizeCards + srcCardPos.X];
|
Data.PlacedCards[srcCardPos.Y * Puzzle::Config::MaxPuzzleSizeCards + srcCardPos.X];
|
||||||
|
|||||||
BIN
src/game/data/puzzles/0.pzl
LFS
BIN
src/game/data/puzzles/0.pzl
LFS
Binary file not shown.
Binary file not shown.
Reference in New Issue
Block a user