fix camera matrix hacks
This commit is contained in:
@@ -6,6 +6,7 @@
|
||||
#include "Level.h"
|
||||
#include "Log.h"
|
||||
#include "Puzzle.h"
|
||||
#include "bx/constants.h"
|
||||
#include "rendering/Rendering.h"
|
||||
|
||||
#include "SDL3/SDL_mouse.h"
|
||||
@@ -93,7 +94,6 @@ namespace Game
|
||||
needReset |= UIQuads.Setup(storagePtr, needReset);
|
||||
|
||||
Tests.IsEnabled = false;
|
||||
Cubes.IsEnabled = false;
|
||||
|
||||
Puzzle::Setup();
|
||||
|
||||
@@ -148,20 +148,12 @@ namespace Game
|
||||
LOG_ERROR("Failed to open puzzle dir at %s:\n%s", puzzleDirPath.getCPtr(), err.getMessage().getCPtr());
|
||||
}
|
||||
|
||||
if (Cubes.Count == 0)
|
||||
if (!IsValid(PlayerOutsideViewCube))
|
||||
{
|
||||
for (uint32_t yy = 0; yy < 11; ++yy)
|
||||
{
|
||||
for (uint32_t xx = 0; xx < 11; ++xx)
|
||||
{
|
||||
Cube& c = Cubes.Get(Cubes.New());
|
||||
c.TestX = xx;
|
||||
c.TestY = yy;
|
||||
c.Setup();
|
||||
}
|
||||
}
|
||||
Cubes.New(); // Floor
|
||||
PlayerOutsideViewCube = Cubes.New();
|
||||
Cubes.Get(PlayerOutsideViewCube).Setup();
|
||||
}
|
||||
|
||||
if (Tests.Count == 0)
|
||||
{
|
||||
Tests.Get(Tests.New()).Setup();
|
||||
@@ -187,8 +179,8 @@ namespace Game
|
||||
|
||||
// Input
|
||||
float delta = GetInstance().Time.Delta;
|
||||
constexpr float moveSpeed = 10.0f;
|
||||
constexpr float rotSpeed = 1.6f;
|
||||
float moveSpeed = player.MovementSpeed;
|
||||
float rotSpeed = player.MouseSensitivity;
|
||||
|
||||
float forwardInput = (GetKey(ScanCode::W) ? 1.0f : 0.0f) + (GetKey(ScanCode::S) ? -1.0f : 0.0f);
|
||||
float rightInput = (GetKey(ScanCode::D) ? 1.0f : 0.0f) + (GetKey(ScanCode::A) ? -1.0f : 0.0f);
|
||||
@@ -196,7 +188,7 @@ namespace Game
|
||||
moveInput = bx::normalize(moveInput);
|
||||
bx::Vec3 inputVec = {moveInput.x * delta * moveSpeed, 0.0f, moveInput.y * delta * moveSpeed};
|
||||
Vec2 mouseMovement = GetMouseMovement();
|
||||
bx::Vec3 rotInput = {mouseMovement.y * delta * rotSpeed, mouseMovement.x * delta * rotSpeed, 0.0f};
|
||||
bx::Vec3 rotInput = {mouseMovement.y * delta * -rotSpeed, mouseMovement.x * delta * -rotSpeed, 0.0f};
|
||||
|
||||
if (GetKeyPressedNow(ScanCode::F1))
|
||||
{
|
||||
@@ -222,23 +214,21 @@ namespace Game
|
||||
{
|
||||
player.FreeflyXRot += rotInput.x;
|
||||
player.FreeflyYRot += rotInput.y;
|
||||
bx::mtxRotateY(player.FreeflyCamTransform.Rotation.M, player.FreeflyYRot);
|
||||
player.FreeflyCamTransform.RotateLocal({player.FreeflyXRot, 0.0f, 0.0f});
|
||||
bx::mtxRotateXYZ(player.FreeflyCamTransform.Rotation.M, player.FreeflyXRot, player.FreeflyYRot, 0.0f);
|
||||
}
|
||||
|
||||
player.FreeflyCamTransform.TranslateLocal({0.0f, 0.0f, -inputVec.z});
|
||||
player.FreeflyCamTransform.TranslateLocal({-inputVec.x, 0.0f, 0.0f});
|
||||
player.FreeflyCamTransform.TranslateLocal({0.0f, 0.0f, inputVec.z});
|
||||
player.FreeflyCamTransform.TranslateLocal({inputVec.x, 0.0f, 0.0f});
|
||||
}
|
||||
else if (player.CameraM == CameraMode::Walk)
|
||||
{
|
||||
player.PlayerCamTransform.TranslateLocal({0.0f, 0.0f, -inputVec.z});
|
||||
player.PlayerCamTransform.TranslateLocal({-inputVec.x, 0.0f, 0.0f});
|
||||
player.PlayerCamTransform.Position.y = -3.0f;
|
||||
player.PlayerCamTransform.TranslateLocal({0.0f, 0.0f, inputVec.z});
|
||||
player.PlayerCamTransform.TranslateLocal({inputVec.x, 0.0f, 0.0f});
|
||||
player.PlayerCamTransform.Position.y = 3.0f;
|
||||
|
||||
player.WalkXRot += rotInput.x;
|
||||
player.WalkYRot += rotInput.y;
|
||||
bx::mtxRotateY(player.PlayerCamTransform.Rotation.M, player.WalkYRot);
|
||||
player.PlayerCamTransform.RotateLocal({player.WalkXRot, 0.0f, 0.0f});
|
||||
bx::mtxRotateXYZ(player.PlayerCamTransform.Rotation.M, player.WalkXRot, player.WalkYRot, 0.0f);
|
||||
}
|
||||
|
||||
// Cubes
|
||||
@@ -270,15 +260,17 @@ namespace Game
|
||||
bgfx::getCaps()->homogeneousDepth);
|
||||
|
||||
auto& player = GetInstance().Player;
|
||||
if (player.CameraM == CameraMode::Freefly)
|
||||
bool isFreefly = player.CameraM == CameraMode::Freefly;
|
||||
Cubes.Get(PlayerOutsideViewCube).EData.Visible = isFreefly;
|
||||
if (isFreefly)
|
||||
{
|
||||
player.FreeflyCamTransform.UpdateMatrixForCam();
|
||||
bgfx::setViewTransform(viewId, player.FreeflyCamTransform.M.M, proj);
|
||||
player.FreeflyCamTransform.UpdateMatrix();
|
||||
bgfx::setViewTransform(viewId, player.FreeflyCamTransform.MI.M, proj);
|
||||
}
|
||||
else
|
||||
{
|
||||
player.PlayerCamTransform.UpdateMatrixForCam();
|
||||
bgfx::setViewTransform(viewId, player.PlayerCamTransform.M.M, proj);
|
||||
player.PlayerCamTransform.UpdateMatrix();
|
||||
bgfx::setViewTransform(viewId, player.PlayerCamTransform.MI.M, proj);
|
||||
}
|
||||
|
||||
bgfx::touch(viewId);
|
||||
@@ -291,25 +283,15 @@ namespace Game
|
||||
|
||||
void Cube::Setup()
|
||||
{
|
||||
EData.MaterialHandle = EMaterial::Default;
|
||||
EData.MaterialHandle = EMaterial::UI;
|
||||
EData.ModelH = GameRendering::Get().GetModelHandleFromPath("models/cube.gltf");
|
||||
}
|
||||
|
||||
void Cube::Update()
|
||||
{
|
||||
if (TestX >= 0 && TestY >= 0)
|
||||
{
|
||||
double globalTime = GetInstance().Time.Now;
|
||||
double time = TestY <= 5 ? globalTime * 1.0f : 0.0f;
|
||||
float scale = 1.0f + TestX * 0.4f;
|
||||
EData.Transform.Position = bx::Vec3{TestX * 2.0f, TestY * 2.0f, 0.0f};
|
||||
EData.Transform.Scale = {scale, scale, scale};
|
||||
}
|
||||
else
|
||||
{
|
||||
EData.Transform.Position = {0.0f, -1.0f, 0.0f};
|
||||
EData.Transform.Scale = {100.0f, 1.0f, 100.0f};
|
||||
}
|
||||
EData.Transform.Position = GetInstance().Player.PlayerCamTransform.Position;
|
||||
EData.Transform.Rotation = GetInstance().Player.PlayerCamTransform.Rotation;
|
||||
EData.Transform.Scale = {0.2f, 0.2f, 0.2f};
|
||||
}
|
||||
|
||||
void TestEntity::Setup()
|
||||
@@ -342,16 +324,17 @@ namespace Game
|
||||
|
||||
void WorldPuzzle::Update()
|
||||
{
|
||||
Transform& camTransform = GetInstance().Player.PlayerCamTransform;
|
||||
camTransform.UpdateMatrixForCam();
|
||||
Vec3 cameraPos = camTransform.GetPosition() * -1;
|
||||
Level& level = GetInstance().GameLevel;
|
||||
auto& staticCards = Puzzle::GetStaticPuzzleData().Cards;
|
||||
|
||||
Transform& camTransform = GetInstance().Player.PlayerCamTransform;
|
||||
camTransform.UpdateMatrix();
|
||||
Vec3 cameraPos = camTransform.GetPosition();
|
||||
|
||||
Transform boardTransform;
|
||||
boardTransform.Rotation = camTransform.Rotation.Inverse();
|
||||
Vec3 fw = {camTransform.M.M[2], camTransform.M.M[6], camTransform.M.M[10]};
|
||||
Vec3 pos = camTransform.GetPosition() * -1;
|
||||
boardTransform.Rotation = camTransform.Rotation;
|
||||
Vec3 fw = {camTransform.M.M[8], camTransform.M.M[9], camTransform.M.M[10]};
|
||||
Vec3 pos = cameraPos;
|
||||
pos += fw;
|
||||
boardTransform.SetPosition(pos);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user