it works!
This commit is contained in:
@@ -344,17 +344,14 @@ namespace Game
|
||||
mousePos *= 2.0f;
|
||||
mousePos -= 1.0f;
|
||||
Vec4 mousePosView = {mousePos.x, -mousePos.y, 0.0f, 1.0f};
|
||||
Vec4 mousePosCam = GetInstance().Player.ProjectionInverse.Mul(mousePosView);
|
||||
mousePosCam.x /= mousePosCam.w;
|
||||
mousePosCam.y /= mousePosCam.w;
|
||||
mousePosCam.z /= mousePosCam.w;
|
||||
mousePosCam.w = 1.0f;
|
||||
Vec4 mousePosWorld = camTransform.M.Mul(mousePosCam);
|
||||
Vec4 mousePosCam4 = GetInstance().Player.ProjectionInverse.Mul(mousePosView);
|
||||
Vec3 mousePosCam = Vec3{
|
||||
mousePosCam4.x /= mousePosCam4.w,
|
||||
mousePosCam4.y /= mousePosCam4.w,
|
||||
mousePosCam4.z /= mousePosCam4.w,
|
||||
};
|
||||
|
||||
auto& t = level.Tests.Get({0});
|
||||
t.EData.ModelH = GameRendering::Get().GetModelHandleFromPath("models/cube.gltf");
|
||||
t.EData.Transform.Position = {mousePosWorld.x, mousePosWorld.y, mousePosWorld.z};
|
||||
t.EData.Transform.Scale = {0.01f, 0.01f, 0.01f};
|
||||
Vec3 mousePosWorld = camTransform.LocalToGlobalPoint(mousePosCam);
|
||||
|
||||
for (int8_t y = 0; y < Data.HeightTiles / Puzzle::Config::CardSize; ++y)
|
||||
{
|
||||
@@ -392,33 +389,41 @@ namespace Game
|
||||
// quad.EData.Transform.Scale = {0.1f, 0.1f, 0.1f};
|
||||
quad.EData.Transform.Rotate(Vec3{bx::kPi * 0.5f, 0.0f, bx::kPi});
|
||||
|
||||
if (clicked && IsValid && x == 1 && y == 1)
|
||||
if (clicked && IsValid)
|
||||
{
|
||||
quad.EData.Transform.UpdateMatrix();
|
||||
// boardTransform.UpdateMatrix();
|
||||
Vec4 posInQuad = quad.EData.Transform.MI.Mul(mousePosWorld);
|
||||
// Vec4 posInQuad = boardTransform.MI.Mul(mousePosWorld);
|
||||
// if (posInQuad.x >= -1.0f && posInQuad.x <= 1.0f && posInQuad.z >= -1.0f && posInQuad.z <= 1.0f)
|
||||
Vec3 quadPosWorld = quad.EData.Transform.GetPosition();
|
||||
Vec3 quadXWorld = quad.EData.Transform.LocalToGlobalPoint({1, 0, 0});
|
||||
Vec3 quadYWorld = quad.EData.Transform.LocalToGlobalPoint({0, 0, 1});
|
||||
Vec3 intersectPos;
|
||||
if (RayPlaneIntersect(camTransform.GetPosition(),
|
||||
mousePosWorld,
|
||||
quadPosWorld,
|
||||
quadXWorld,
|
||||
quadYWorld,
|
||||
intersectPos))
|
||||
{
|
||||
LOG("---");
|
||||
LOG("%.03f %.03f: Click", mousePos.x, mousePos.y);
|
||||
LOG("%.03f %.03f %.03f %.03f: Cam", mousePosCam.x, mousePosCam.y, mousePosCam.z, mousePosCam.w);
|
||||
LOG("%.03f %.03f %.03f %.03f: World",
|
||||
mousePosWorld.x,
|
||||
mousePosWorld.y,
|
||||
mousePosWorld.z,
|
||||
mousePosWorld.w);
|
||||
LOG("%.03f %.03f %.03f %.03f: Card (%u %u)",
|
||||
posInQuad.x,
|
||||
posInQuad.y,
|
||||
posInQuad.z,
|
||||
posInQuad.w,
|
||||
x,
|
||||
y);
|
||||
LOG("%.03f %.03f %.03f: Player",
|
||||
camTransform.Position.x,
|
||||
camTransform.Position.y,
|
||||
camTransform.Position.z);
|
||||
Vec3 quadSpaceIntersect = quad.EData.Transform.GlobalToLocalPoint(intersectPos);
|
||||
if (quadSpaceIntersect.x >= -1.0f && quadSpaceIntersect.x <= 1.0f &&
|
||||
quadSpaceIntersect.z >= -1.0f && quadSpaceIntersect.z <= 1.0f)
|
||||
{
|
||||
// LOG("---");
|
||||
// LOG("%.03f %.03f: Click", mousePos.x, mousePos.y);
|
||||
// LOG("%.03f %.03f %.03f: MouseCam", mousePosCam.x, mousePosCam.y, mousePosCam.z);
|
||||
// LOG("%.03f %.03f %.03f: MouseWorld", mousePosWorld.x, mousePosWorld.y, mousePosWorld.z);
|
||||
// LOG("%.03f %.03f %.03f: Player",
|
||||
// camTransform.Position.x,
|
||||
// camTransform.Position.y,
|
||||
// camTransform.Position.z);
|
||||
// LOG("%.03f %.03f %.03f: QuadWorld", quadPosWorld.x, quadPosWorld.y, quadPosWorld.z);
|
||||
// LOG("%.03f %.03f %.03f: QuadX", quadXWorld.x, quadXWorld.y, quadXWorld.z);
|
||||
// LOG("%.03f %.03f %.03f: QuadY", quadYWorld.x, quadYWorld.y, quadYWorld.z);
|
||||
// LOG("%.03f %.03f %.03f: Intersect", intersectPos.x, intersectPos.y, intersectPos.z);
|
||||
// LOG("%.03f %.03f %.03f: IntersectQ",
|
||||
// quadSpaceIntersect.x,
|
||||
// quadSpaceIntersect.y,
|
||||
// quadSpaceIntersect.z);
|
||||
LOG("Clicked %u %u", x, y);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user