From 4ba65713ef76356327337e60a8153da99bf23c6a Mon Sep 17 00:00:00 2001 From: Asuro Date: Mon, 31 Mar 2025 02:01:14 +0200 Subject: [PATCH] move transform to generated data --- assets/blender/landscape.blend | 3 + src/build-release.bat | 1 - src/build.bat | 1 - src/build_release.ps1 | 1 + src/{configure.bat => configure.ps1} | 0 src/game/Gen.cpp | 91 +++++++++++++++++++++ src/game/Gen.h | 13 +++ src/game/Global.cpp | 114 --------------------------- src/game/Global.h | 30 +------ src/game/Instance.h | 4 +- src/game/Level.cpp | 45 +++++------ src/game/Level.h | 13 ++- src/game/Puzzle.cpp | 1 + src/game/Tools.cpp | 5 +- src/game/data/static/puzzle.dat | Bin 1856 -> 1856 bytes src/game/mini.def | 26 ++++++ src/game/rendering/Dither.cpp | 2 + src/gen/Generated.cpp | 79 ++++++++++++++++++- src/gen/Generated.h | 71 +++++++++++++++-- src/gen/TypeData.bin | 2 +- src/models/landscape.glb | 3 + src/setup-release.bat | 4 - tools/minidef.exe | 4 +- 23 files changed, 323 insertions(+), 190 deletions(-) create mode 100644 assets/blender/landscape.blend delete mode 100644 src/build-release.bat delete mode 100644 src/build.bat create mode 100644 src/build_release.ps1 rename src/{configure.bat => configure.ps1} (100%) create mode 100644 src/models/landscape.glb delete mode 100644 src/setup-release.bat diff --git a/assets/blender/landscape.blend b/assets/blender/landscape.blend new file mode 100644 index 0000000..1648c79 --- /dev/null +++ b/assets/blender/landscape.blend @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:49b4d689f9127f4c0a3e3e0ea5ef4f8d319f90e279aa45a0cba1c2c9113fe308 +size 924502 diff --git a/src/build-release.bat b/src/build-release.bat deleted file mode 100644 index 453b56f..0000000 --- a/src/build-release.bat +++ /dev/null @@ -1 +0,0 @@ -cmake --build cmake-build-release diff --git a/src/build.bat b/src/build.bat deleted file mode 100644 index ce880a2..0000000 --- a/src/build.bat +++ /dev/null @@ -1 +0,0 @@ -cmake --build cmake-build diff --git a/src/build_release.ps1 b/src/build_release.ps1 new file mode 100644 index 0000000..d3e254a --- /dev/null +++ b/src/build_release.ps1 @@ -0,0 +1 @@ +cmake --build cmake-build-release --config Release diff --git a/src/configure.bat b/src/configure.ps1 similarity index 100% rename from src/configure.bat rename to src/configure.ps1 diff --git a/src/game/Gen.cpp b/src/game/Gen.cpp index 44b54b7..3398753 100644 --- a/src/game/Gen.cpp +++ b/src/game/Gen.cpp @@ -1,5 +1,7 @@ #include "Gen.h" +#include "bx/math.h" + namespace Gen { bool IsValid(const ModelHandle& h) @@ -364,4 +366,93 @@ namespace Gen out = Vec3{l1.x + u * LbMinusLa.x, l1.y + u * LbMinusLa.y, l1.z + u * LbMinusLa.z}; return true; } + + void Translate(Transform& trans, Vec3 offset) + { + trans.Position += Vec3{offset.x, offset.y, offset.z}; + } + + void TranslateLocal(Transform& trans, Vec3 offset) + { + Vec3 localOffset = GlobalToLocalDirection(trans, offset); + trans.Position += Vec3{localOffset.x, localOffset.y, localOffset.z}; + } + + void Rotate(Transform& trans, Vec3 rotation) + { + float rot[16]{0}; + bx::mtxRotateXYZ(rot, rotation.x, rotation.y, rotation.z); + float temp[16]{0}; + bx::mtxMul(temp, rot, trans.Rotation.M); + bx::memCopy(trans.Rotation.M, temp, sizeof(temp)); + } + + void RotateLocal(Transform& trans, Vec3 rotation) + { + float rot[16]{0}; + bx::mtxRotateXYZ(rot, rotation.x, rotation.y, rotation.z); + float temp[16]{0}; + bx::mtxMul(temp, trans.Rotation.M, rot); + bx::memCopy(trans.Rotation.M, temp, sizeof(temp)); + } + + Vec3 AxisRight(const Mat4& trans) + { + return {trans.M[0], trans.M[1], trans.M[2]}; + } + + Vec3 AxisUp(const Mat4& trans) + { + return {trans.M[4], trans.M[5], trans.M[6]}; + } + + Vec3 AxisForward(const Mat4& trans) + { + return {trans.M[8], trans.M[9], trans.M[10]}; + } + + void UpdateMatrix(Transform& trans) + { + Mat4 pos; + Mat4 scale; + bx::mtxTranslate(pos.M, trans.Position.x, trans.Position.y, trans.Position.z); + bx::mtxScale(scale.M, trans.Scale.x, trans.Scale.y, trans.Scale.z); + Mat4 temp; + bx::mtxMul(temp.M, scale.M, trans.Rotation.M); + bx::mtxMul(trans.M.M, temp.M, pos.M); + bx::mtxInverse(trans.MI.M, trans.M.M); + } + + Vec3 GlobalToLocalDirection(Transform& trans, Vec3 global) + { + UpdateMatrix(trans); + float in[4]{global.x, global.y, global.z, 0.0f}; + float out[4]{0.0f}; + bx::vec4MulMtx(out, in, Transpose(trans.MI).M); + return {out[0], out[1], out[2]}; + } + Vec3 GlobalToLocalPoint(Transform& trans, Vec3 global) + { + UpdateMatrix(trans); + float in[4]{global.x, global.y, global.z, 1.0f}; + float out[4]{0.0f}; + bx::vec4MulMtx(out, in, trans.MI.M); + return {out[0], out[1], out[2]}; + } + Vec3 LocalToGlobalDirection(Transform& trans, Vec3 local) + { + UpdateMatrix(trans); + float in[4]{local.x, local.y, local.z, 0.0f}; + float out[4]{0.0f}; + bx::vec4MulMtx(out, in, Transpose(trans.M).M); + return {out[0], out[1], out[2]}; + } + Vec3 LocalToGlobalPoint(Transform& trans, Vec3 local) + { + UpdateMatrix(trans); + float in[4]{local.x, local.y, local.z, 1.0f}; + float out[4]{0.0f}; + bx::vec4MulMtx(out, in, trans.M.M); + return {out[0], out[1], out[2]}; + } } // namespace Gen diff --git a/src/game/Gen.h b/src/game/Gen.h index b505015..1d5b61d 100644 --- a/src/game/Gen.h +++ b/src/game/Gen.h @@ -77,4 +77,17 @@ namespace Gen Vec3 CrossProduct(Vec3 a, Vec3 b); Vec3 CrossProductFromPlane(Vec3 a, Vec3 b, Vec3 c); bool RayPlaneIntersect(Vec3 l1, Vec3 l2, Vec3 p1, Vec3 p2, Vec3 p3, Vec3& out); + + void Translate(Transform& trans, Vec3 offset); + void TranslateLocal(Transform& trans, Vec3 offset); + void Rotate(Transform& trans, Vec3 rotation); + void RotateLocal(Transform& trans, Vec3 rotation); + Vec3 LocalToGlobalPoint(Transform& trans, Vec3 local); + Vec3 LocalToGlobalDirection(Transform& trans, Vec3 local); + Vec3 GlobalToLocalPoint(Transform& trans, Vec3 global); + Vec3 GlobalToLocalDirection(Transform& trans, Vec3 global); + Vec3 AxisRight(const Mat4& mat); + Vec3 AxisUp(const Mat4& mat); + Vec3 AxisForward(const Mat4& mat); + void UpdateMatrix(Transform& trans); } // namespace Gen diff --git a/src/game/Global.cpp b/src/game/Global.cpp index e8f45dc..fd02264 100644 --- a/src/game/Global.cpp +++ b/src/game/Global.cpp @@ -1,10 +1,7 @@ #include "../engine/Shared.h" -#include "Gen.h" #include "Global.h" #include "Instance.h" -#include "bx/bx.h" -#include "bx/math.h" #include #include @@ -53,114 +50,3 @@ namespace Game return reinterpret_cast(ptrAligned); } } // namespace Game - -void Transform::CreateTransform(float* out, bx::Vec3 pos, bx::Quaternion rot, bx::Vec3 scale) -{ - if (out == nullptr) return; - float rMat[16]{0}; - float tMat[16]{0}; - float sMat[16]{0}; - bx::mtxFromQuaternion(rMat, bx::Quaternion{rot.x, rot.y, rot.z, rot.w}); - bx::mtxTranslate(tMat, pos.x, pos.y, pos.z); - bx::mtxScale(sMat, scale.x, scale.y, scale.z); - float buf[16]{0}; - bx::mtxMul(buf, rMat, sMat); - bx::mtxMul(out, buf, tMat); -} - -void Transform::Translate(Vec3 offset) -{ - Position = bx::add(Position, {offset.x, offset.y, offset.z}); -} - -void Transform::TranslateLocal(Vec3 offset) -{ - Vec3 localOffset = GlobalToLocalDirection(offset); - Position = bx::add(Position, {localOffset.x, localOffset.y, localOffset.z}); -} - -void Transform::Rotate(Vec3 rotation) -{ - float rot[16]{0}; - bx::mtxRotateXYZ(rot, rotation.x, rotation.y, rotation.z); - float temp[16]{0}; - bx::mtxMul(temp, rot, Rotation.M); - bx::memCopy(Rotation.M, temp, sizeof(temp)); -} - -void Transform::RotateLocal(Vec3 rotation) -{ - float rot[16]{0}; - bx::mtxRotateXYZ(rot, rotation.x, rotation.y, rotation.z); - float temp[16]{0}; - bx::mtxMul(temp, Rotation.M, rot); - bx::memCopy(Rotation.M, temp, sizeof(temp)); -} - -Vec3 Transform::Right() const -{ - return {M.M[0], M.M[1], M.M[2]}; -} - -Vec3 Transform::Up() const -{ - return {M.M[4], M.M[5], M.M[6]}; -} - -Vec3 Transform::Forward() const -{ - return {M.M[8], M.M[9], M.M[10]}; -} - -void Transform::UpdateMatrix() -{ - Mat4 pos; - Mat4 scale; - bx::mtxTranslate(pos.M, Position.x, Position.y, Position.z); - bx::mtxScale(scale.M, Scale.x, Scale.y, Scale.z); - Mat4 temp; - bx::mtxMul(temp.M, scale.M, Rotation.M); - bx::mtxMul(M.M, temp.M, pos.M); - bx::mtxInverse(MI.M, M.M); -} - -Vec3 Transform::GlobalToLocalDirection(Vec3 global) -{ - UpdateMatrix(); - float in[4]{global.x, global.y, global.z, 0.0f}; - float out[4]{0.0f}; - bx::vec4MulMtx(out, in, Transpose(MI).M); - return {out[0], out[1], out[2]}; -} -Vec3 Transform::GlobalToLocalPoint(Vec3 global) -{ - UpdateMatrix(); - float in[4]{global.x, global.y, global.z, 1.0f}; - float out[4]{0.0f}; - bx::vec4MulMtx(out, in, MI.M); - return {out[0], out[1], out[2]}; -} -Vec3 Transform::LocalToGlobalDirection(Vec3 local) -{ - UpdateMatrix(); - float in[4]{local.x, local.y, local.z, 0.0f}; - float out[4]{0.0f}; - bx::vec4MulMtx(out, in, Transpose(M).M); - return {out[0], out[1], out[2]}; -} -Vec3 Transform::LocalToGlobalPoint(Vec3 local) -{ - UpdateMatrix(); - float in[4]{local.x, local.y, local.z, 1.0f}; - float out[4]{0.0f}; - bx::vec4MulMtx(out, in, M.M); - return {out[0], out[1], out[2]}; -} -void Transform::SetPosition(Vec3 pos) -{ - Position = {pos.x, pos.y, pos.z}; -} -Vec3 Transform::GetPosition() -{ - return {Position.x, Position.y, Position.z}; -} diff --git a/src/game/Global.h b/src/game/Global.h index e424bcc..fbd3b74 100644 --- a/src/game/Global.h +++ b/src/game/Global.h @@ -1,7 +1,6 @@ #pragma once -#include "../gen/Generated.h" -#include "bx/math.h" +#include inline int32_t SetFlags(int32_t in, int32_t flags) { @@ -24,33 +23,6 @@ inline bool GetFlag(int32_t in, int32_t flags) return (in & flags) > 0; } -struct Transform -{ - Gen::Mat4 M; - Gen::Mat4 MI; - bx::Vec3 Position{0.0f, 0.0f, 0.0f}; - Gen::Mat4 Rotation; - bx::Vec3 Scale{1.0f, 1.0f, 1.0f}; - - static void CreateTransform(float* out, bx::Vec3 pos, bx::Quaternion rot, bx::Vec3 scale); - void Translate(Gen::Vec3 offset); - void TranslateLocal(Gen::Vec3 offset); - void Rotate(Gen::Vec3 rotation); - void RotateLocal(Gen::Vec3 rotation); - Gen::Vec3 LocalToGlobalPoint(Gen::Vec3 local); - Gen::Vec3 LocalToGlobalDirection(Gen::Vec3 local); - Gen::Vec3 GlobalToLocalPoint(Gen::Vec3 global); - Gen::Vec3 GlobalToLocalDirection(Gen::Vec3 global); - Gen::Vec3 Right() const; - Gen::Vec3 Up() const; - Gen::Vec3 Forward() const; - void SetPosition(Gen::Vec3 pos); - Gen::Vec3 GetPosition(); - const float* GetPtr(); - void UpdateMatrix(); - void UpdateMatrixForCam(); -}; - struct SharedData; namespace Game diff --git a/src/game/Instance.h b/src/game/Instance.h index d1edfdc..65c8926 100644 --- a/src/game/Instance.h +++ b/src/game/Instance.h @@ -28,8 +28,8 @@ namespace Game struct PlayerData { - Transform PlayerCamTransform; - Transform FreeflyCamTransform; + Gen::Transform PlayerCamTransform; + Gen::Transform FreeflyCamTransform; Gen::Mat4 Projection; Gen::Mat4 ProjectionInverse; float FreeflyXRot = 0.0f; diff --git a/src/game/Level.cpp b/src/game/Level.cpp index a46e996..68de96d 100644 --- a/src/game/Level.cpp +++ b/src/game/Level.cpp @@ -31,7 +31,7 @@ namespace Game if (!Visible) return; auto& rendering = GameRendering::Get(); - Transform.UpdateMatrix(); + UpdateMatrix(Transform); bgfx::setTransform(Transform.M.M); const Model& currentModel = models[ModelH.ModelIdx]; @@ -95,6 +95,7 @@ namespace Game needReset |= Tests.Setup(storagePtr, needReset); needReset |= PuzzleTiles.Setup(storagePtr, needReset); needReset |= UIQuads.Setup(storagePtr, needReset); + needReset |= LevelEntities.Setup(storagePtr, needReset); Puzzle::Setup(); @@ -214,13 +215,13 @@ namespace Game 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}); + TranslateLocal(player.FreeflyCamTransform, {0.0f, 0.0f, inputVec.z}); + TranslateLocal(player.FreeflyCamTransform, {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}); + TranslateLocal(player.PlayerCamTransform, {0.0f, 0.0f, inputVec.z}); + TranslateLocal(player.PlayerCamTransform, {inputVec.x, 0.0f, 0.0f}); player.PlayerCamTransform.Position.y = 3.0f; player.WalkXRot += rotInput.x; @@ -261,12 +262,12 @@ namespace Game Cubes.Get(PlayerOutsideViewCube).EData.Visible = isFreefly; if (isFreefly) { - player.FreeflyCamTransform.UpdateMatrix(); + UpdateMatrix(player.FreeflyCamTransform); bgfx::setViewTransform(viewId, player.FreeflyCamTransform.MI.M, &player.Projection.M[0]); } else { - player.PlayerCamTransform.UpdateMatrix(); + UpdateMatrix(player.PlayerCamTransform); bgfx::setViewTransform(viewId, player.PlayerCamTransform.MI.M, &player.Projection.M[0]); } @@ -325,15 +326,15 @@ namespace Game auto& visuals = Puzzle::GetStaticPuzzleData().Visuals; Transform& camTransform = GetInstance().Player.PlayerCamTransform; - camTransform.UpdateMatrix(); - Vec3 cameraPos = camTransform.GetPosition(); + UpdateMatrix(camTransform); + Vec3 cameraPos = camTransform.Position; Transform boardTransform; boardTransform.Rotation = camTransform.Rotation; Vec3 fw = {camTransform.M.M[8], camTransform.M.M[9], camTransform.M.M[10]}; Vec3 pos = cameraPos; pos += fw * 1.0f; - boardTransform.SetPosition(pos); + boardTransform.Position = pos; Vec2 mousePos = GetMousePos(); mousePos.x = mousePos.x / window.WindowWidth; @@ -348,7 +349,7 @@ namespace Game mousePosCam4.z /= mousePosCam4.w, }; - Vec3 mousePosWorld = camTransform.LocalToGlobalPoint(mousePosCam); + Vec3 mousePosWorld = LocalToGlobalPoint(camTransform, mousePosCam); for (int8_t y = 0; y < Data.HeightTiles / Puzzle::Config::CardSize; ++y) { @@ -376,7 +377,7 @@ namespace Game { cardPos = {x * Puzzle::Config::CardScaleWorld, -5.0f, y * Puzzle::Config::CardScaleWorld}; } - tile.EData.Transform.SetPosition(cardPos); + tile.EData.Transform.Position = cardPos; bx::mtxRotateY(tile.EData.Transform.Rotation.M, card.Rotation * bx::kPi * 0.5f); // Quad @@ -387,19 +388,19 @@ namespace Game : 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} * - UICardOffset); + TranslateLocal(quad.EData.Transform, + Vec3{(float)card.Position.X, (float)card.Position.Y, 0.0f} * UICardOffset); quad.EData.Transform.Scale = {0.1f, 0.1f, 0.1f}; - quad.EData.Transform.Rotate(Vec3{bx::kPi * 0.5f, 0.0f, (1.0f - card.Rotation * 0.5f) * bx::kPi}); + Rotate(quad.EData.Transform, Vec3{bx::kPi * 0.5f, 0.0f, (1.0f - card.Rotation * 0.5f) * bx::kPi}); - Vec3 quadPosWorld = quad.EData.Transform.GetPosition(); - Vec3 quadXWorld = quad.EData.Transform.LocalToGlobalPoint({1, 0, 0}); - Vec3 quadZWorld = quad.EData.Transform.LocalToGlobalPoint({0, 0, 1}); + Vec3 quadPosWorld = quad.EData.Transform.Position; + Vec3 quadXWorld = LocalToGlobalPoint(quad.EData.Transform, {1, 0, 0}); + Vec3 quadZWorld = LocalToGlobalPoint(quad.EData.Transform, {0, 0, 1}); Vec3 intersectPos; if (RayPlaneIntersect( - camTransform.GetPosition(), mousePosWorld, quadPosWorld, quadXWorld, quadZWorld, intersectPos)) + camTransform.Position, mousePosWorld, quadPosWorld, quadXWorld, quadZWorld, intersectPos)) { - Vec3 quadSpaceIntersect = quad.EData.Transform.GlobalToLocalPoint(intersectPos); + Vec3 quadSpaceIntersect = GlobalToLocalPoint(quad.EData.Transform, intersectPos); if (isValid && quadSpaceIntersect.x >= -1.0f && quadSpaceIntersect.x <= 1.0f && quadSpaceIntersect.z >= -1.0f && quadSpaceIntersect.z <= 1.0f) { @@ -421,9 +422,9 @@ namespace Game { Vec3 dragPos = intersectPos; dragPos -= fw * 0.01f; - quad.EData.Transform.SetPosition(dragPos); + quad.EData.Transform.Position = dragPos; - Vec3 boardPos = boardTransform.GlobalToLocalPoint(intersectPos); + Vec3 boardPos = GlobalToLocalPoint(boardTransform, intersectPos); Vec3 boardTilePos = boardPos / UICardOffset; int32_t xPos = (int32_t)bx::round(boardTilePos.x); int32_t yPos = (int32_t)bx::round(boardTilePos.y); diff --git a/src/game/Level.h b/src/game/Level.h index e3e0b3e..0cff257 100644 --- a/src/game/Level.h +++ b/src/game/Level.h @@ -1,6 +1,5 @@ #pragma once #include "../engine/Shared.h" -#include "Global.h" #include "Log.h" #include "Puzzle.h" #include "rendering/Rendering.h" @@ -23,7 +22,7 @@ namespace Game { Gen::Vec4 DotColor{1.0f, 1.0f, 1.0f, 1.0f}; Gen::Vec4 BaseColor{0.0f, 0.0f, 0.0f, 1.0f}; - Transform Transform; + Gen::Transform Transform; EMaterial MaterialHandle = EMaterial::UNDEFINED; Gen::TextureHandle TextureHandle; Gen::ModelHandle ModelH; @@ -63,6 +62,12 @@ namespace Game EntityRenderData EData; }; + ENTITY_HANDLE(LevelEntityHandle); + struct LevelEntity + { + EntityRenderData EData; + }; + class IEntityManager { public: @@ -115,7 +120,7 @@ namespace Game T& Get(HandleT handle) { - if (handle.Idx > Count) + if (handle.Idx >= Count) { ERROR_ONCE("OOB Access!"); return InvalidObject; @@ -155,6 +160,8 @@ namespace Game EntityManager Tests; EntityManager PuzzleTiles; EntityManager UIQuads; + EntityManager LevelEntities; + CubeHandle PlayerOutsideViewCube; public: diff --git a/src/game/Puzzle.cpp b/src/game/Puzzle.cpp index 3ab64fe..38a82c9 100644 --- a/src/game/Puzzle.cpp +++ b/src/game/Puzzle.cpp @@ -1,3 +1,4 @@ +#include "../gen/Def.h" #include "Gen.h" #include "Global.h" #include "Instance.h" diff --git a/src/game/Tools.cpp b/src/game/Tools.cpp index fb05288..ee2b9f3 100644 --- a/src/game/Tools.cpp +++ b/src/game/Tools.cpp @@ -4,8 +4,9 @@ #include "Mesh.h" #include "Puzzle.h" #include "Tools.h" -#include "bx/timer.h" +#include "bx/filepath.h" +#include "bx/timer.h" #include #include @@ -194,7 +195,7 @@ namespace Tools ImGui::Image(rendering.DitherTextures.RampTex.idx, {BX_COUNTOF(rendering.DitherTextures.BrightnessRamp), 8}); } - Vec3 quadPos = level.UIQuads.Get({0}).EData.Transform.GetPosition(); + Vec3 quadPos = level.UIQuads.Get({0}).EData.Transform.Position; ImGui::Text("%f %f %f", quadPos.x, quadPos.y, quadPos.z); ImGui::Text("Shader log:"); diff --git a/src/game/data/static/puzzle.dat b/src/game/data/static/puzzle.dat index 055a0b0583b4e31fa544dddcf5e01c9e7e1744f7..7255bf7a07e54af5cc692bbc408d64de4df88347 100644 GIT binary patch delta 12 TcmX@WcYtq#4I}qPTV{3u8;t{P delta 12 TcmX@WcYtq#4I|e^TV{3u8;ApJ diff --git a/src/game/mini.def b/src/game/mini.def index 7c91b7c..89311b6 100644 --- a/src/game/mini.def +++ b/src/game/mini.def @@ -38,6 +38,15 @@ type Mat4 }") } +type Transform +{ + Mat4 M + Mat4 MI + Vec3 Position + Mat4 Rotation + Vec3 Scale Default("{1.0f, 1.0f, 1.0f}") +} + type AssetHandle { u32 Idx Default("UINT32_MAX") @@ -126,3 +135,20 @@ type PuzzleData u32 GoalPositionCount PuzPos GoalPositions Arr(16) } + +enum EMaterial +{ + Default + UI +} + +type SavedEntityRenderData +{ + Vec4 BaseColor + Vec4 HighlightColor + Transform TF + EMaterial Material + TextureHandle Texture + ModelHandle Model + b Visible +} diff --git a/src/game/rendering/Dither.cpp b/src/game/rendering/Dither.cpp index 082918d..83d21d1 100644 --- a/src/game/rendering/Dither.cpp +++ b/src/game/rendering/Dither.cpp @@ -2,6 +2,8 @@ #include "../Log.h" #include "Dither.h" +#include "bx/math.h" + using namespace Gen; void DitherGen(DitherData& data, int32_t recursion) diff --git a/src/gen/Generated.cpp b/src/gen/Generated.cpp index 12ac05d..3242c5e 100644 --- a/src/gen/Generated.cpp +++ b/src/gen/Generated.cpp @@ -1,3 +1,4 @@ +#include "Def.h" #include "Generated.h" namespace Gen @@ -22,6 +23,26 @@ namespace Gen } return isOk; } + bool Save(const EMaterial::Enum* obj, uint32_t count, Serializer& serializer) + { + bool isOk = true; + for (uint32_t i = 0; i < count; ++i) + { + auto val = (int32_t)obj[i]; + isOk = Save(&val, 1, serializer) && isOk; + } + return isOk; + } + bool Load(EMaterial::Enum* obj, uint32_t count, Deserializer& serializer) + { + bool isOk = true; + for (uint32_t i = 0; i < count; ++i) + { + int32_t& val = (int32_t&)obj[i]; + isOk = Load(&val, 1, serializer) && isOk; + } + return isOk; + } bool Save(const Vec2* obj, uint32_t count, Serializer& serializer) { bool isOk = true; @@ -124,6 +145,32 @@ namespace Gen } return isOk; } + bool Save(const Transform* obj, uint32_t count, Serializer& serializer) + { + bool isOk = true; + for (uint32_t i = 0; i < count; ++i) + { + isOk = Save(&obj[i].M, 1, serializer) && isOk; + isOk = Save(&obj[i].MI, 1, serializer) && isOk; + isOk = Save(&obj[i].Position, 1, serializer) && isOk; + isOk = Save(&obj[i].Rotation, 1, serializer) && isOk; + isOk = Save(&obj[i].Scale, 1, serializer) && isOk; + } + return isOk; + } + bool Load(Transform* obj, uint32_t count, Deserializer& serializer) + { + bool isOk = true; + for (uint32_t i = 0; i < count; ++i) + { + isOk = Load(&obj[i].M, 1, serializer) && isOk; + isOk = Load(&obj[i].MI, 1, serializer) && isOk; + isOk = Load(&obj[i].Position, 1, serializer) && isOk; + isOk = Load(&obj[i].Rotation, 1, serializer) && isOk; + isOk = Load(&obj[i].Scale, 1, serializer) && isOk; + } + return isOk; + } bool Save(const AssetHandle* obj, uint32_t count, Serializer& serializer) { bool isOk = true; @@ -366,4 +413,34 @@ namespace Gen } return isOk; } -} // namespace Gen + bool Save(const SavedEntityRenderData* obj, uint32_t count, Serializer& serializer) + { + bool isOk = true; + for (uint32_t i = 0; i < count; ++i) + { + isOk = Save(&obj[i].BaseColor, 1, serializer) && isOk; + isOk = Save(&obj[i].HighlightColor, 1, serializer) && isOk; + isOk = Save(&obj[i].TF, 1, serializer) && isOk; + isOk = Save(&obj[i].Material, 1, serializer) && isOk; + isOk = Save(&obj[i].Texture, 1, serializer) && isOk; + isOk = Save(&obj[i].Model, 1, serializer) && isOk; + isOk = Save(&obj[i].Visible, 1, serializer) && isOk; + } + return isOk; + } + bool Load(SavedEntityRenderData* obj, uint32_t count, Deserializer& serializer) + { + bool isOk = true; + for (uint32_t i = 0; i < count; ++i) + { + isOk = Load(&obj[i].BaseColor, 1, serializer) && isOk; + isOk = Load(&obj[i].HighlightColor, 1, serializer) && isOk; + isOk = Load(&obj[i].TF, 1, serializer) && isOk; + isOk = Load(&obj[i].Material, 1, serializer) && isOk; + isOk = Load(&obj[i].Texture, 1, serializer) && isOk; + isOk = Load(&obj[i].Model, 1, serializer) && isOk; + isOk = Load(&obj[i].Visible, 1, serializer) && isOk; + } + return isOk; + } +} diff --git a/src/gen/Generated.h b/src/gen/Generated.h index eacf04d..ef4ec1a 100644 --- a/src/gen/Generated.h +++ b/src/gen/Generated.h @@ -1,12 +1,14 @@ #pragma once -#include "Def.h" +#include namespace Gen { + struct Serializer; + struct Deserializer; struct PuzzleElementType { - static constexpr uint32_t Hash = 2024002654; static constexpr int32_t EntryCount = 8; + static constexpr uint32_t Hash = 2024002654; enum Enum : int32_t { None, @@ -18,7 +20,8 @@ namespace Gen Blocked, Bridge, }; - static constexpr char EntryNames[EntryCount][64]{ + static constexpr char EntryNames[EntryCount][64] + { "None", "WaterIn", "WaterGoal", @@ -28,7 +31,8 @@ namespace Gen "Blocked", "Bridge", }; - static constexpr char GameName[EntryCount][64]{ + static constexpr char GameName[EntryCount][64] + { "Empty", "Water Source", "Water Goal", @@ -38,7 +42,8 @@ namespace Gen "Blocked", "Bridge", }; - static constexpr char ShortName[EntryCount][64]{ + static constexpr char ShortName[EntryCount][64] + { " ", "~+", "~!", @@ -49,6 +54,21 @@ namespace Gen "#", }; }; + struct EMaterial + { + static constexpr int32_t EntryCount = 2; + static constexpr uint32_t Hash = 2024002654; + enum Enum : int32_t + { + Default, + UI, + }; + static constexpr char EntryNames[EntryCount][64] + { + "Default", + "UI", + }; + }; struct Vec2 { static constexpr uint32_t Hash = 2667033957; @@ -73,12 +93,30 @@ namespace Gen struct Mat3 { static constexpr uint32_t Hash = 3364737048; - float M[9] = {1.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 1.0f}; + float M[9] = { + 1.0f, 0.0f, 0.0f, + 0.0f, 1.0f, 0.0f, + 0.0f, 0.0f, 1.0f + }; }; struct Mat4 { static constexpr uint32_t Hash = 1650094019; - float M[16] = {1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f}; + float M[16] = { + 1.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 1.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 1.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 1.0f + }; + }; + struct Transform + { + static constexpr uint32_t Hash = 4103530190; + Mat4 M = {}; + Mat4 MI = {}; + Vec3 Position = {}; + Mat4 Rotation = {}; + Vec3 Scale = {1.0f, 1.0f, 1.0f}; }; struct AssetHandle { @@ -157,8 +195,21 @@ namespace Gen uint32_t GoalPositionCount = {}; PuzPos GoalPositions[16] = {}; }; + struct SavedEntityRenderData + { + static constexpr uint32_t Hash = 3172756855; + Vec4 BaseColor = {}; + Vec4 HighlightColor = {}; + Transform TF = {}; + EMaterial::Enum Material = {}; + TextureHandle Texture = {}; + ModelHandle Model = {}; + bool Visible = {}; + }; bool Save(const PuzzleElementType::Enum* obj, uint32_t count, Serializer& serializer); bool Load(PuzzleElementType::Enum* obj, uint32_t count, Deserializer& serializer); + bool Save(const EMaterial::Enum* obj, uint32_t count, Serializer& serializer); + bool Load(EMaterial::Enum* obj, uint32_t count, Deserializer& serializer); bool Save(const Vec2* obj, uint32_t count, Serializer& serializer); bool Load(Vec2* obj, uint32_t count, Deserializer& serializer); bool Save(const Vec3* obj, uint32_t count, Serializer& serializer); @@ -169,6 +220,8 @@ namespace Gen bool Load(Mat3* obj, uint32_t count, Deserializer& serializer); bool Save(const Mat4* obj, uint32_t count, Serializer& serializer); bool Load(Mat4* obj, uint32_t count, Deserializer& serializer); + bool Save(const Transform* obj, uint32_t count, Serializer& serializer); + bool Load(Transform* obj, uint32_t count, Deserializer& serializer); bool Save(const AssetHandle* obj, uint32_t count, Serializer& serializer); bool Load(AssetHandle* obj, uint32_t count, Deserializer& serializer); bool Save(const ModelHandle* obj, uint32_t count, Serializer& serializer); @@ -191,4 +244,6 @@ namespace Gen bool Load(PlacedPuzzleCard* obj, uint32_t count, Deserializer& serializer); bool Save(const PuzzleData* obj, uint32_t count, Serializer& serializer); bool Load(PuzzleData* obj, uint32_t count, Deserializer& serializer); -} // namespace Gen + bool Save(const SavedEntityRenderData* obj, uint32_t count, Serializer& serializer); + bool Load(SavedEntityRenderData* obj, uint32_t count, Deserializer& serializer); +} diff --git a/src/gen/TypeData.bin b/src/gen/TypeData.bin index 82b7afc..9bb360f 100644 --- a/src/gen/TypeData.bin +++ b/src/gen/TypeData.bin @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4d8b6f8dd39af5ae0ee5e4ed7297faa3928682f67a48434bd4fae03ecc805e02 +oid sha256:c046dfb8bc2f658b9c86bab711d41f183875c8e78713d1895eed90e0f74ba1d2 size 6627348 diff --git a/src/models/landscape.glb b/src/models/landscape.glb new file mode 100644 index 0000000..eeee03b --- /dev/null +++ b/src/models/landscape.glb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8ac3a438b7b478616c945abfd35b49dcfc8798fcddaad11544a699a809c4ea02 +size 2428 diff --git a/src/setup-release.bat b/src/setup-release.bat deleted file mode 100644 index b0eeec6..0000000 --- a/src/setup-release.bat +++ /dev/null @@ -1,4 +0,0 @@ -cd dependency/bgfx.cmake -cmake -G "Ninja" -S . -B cmake-build-release -DCMAKE_BUILD_TYPE=Release -DCMAKE_C_COMPILER="clang.exe" -DCMAKE_CXX_COMPILER="clang++.exe" -DBGFX_BUILD_TOOLS=OFF -DBGFX_BUILD_EXAMPLES=OFF -cd ..\.. -cmake -G "Ninja" -S . -B cmake-build-release -DCMAKE_BUILD_TYPE=Release -DCMAKE_C_COMPILER="clang.exe" -DCMAKE_CXX_COMPILER="clang++.exe" -DCMAKE_EXPORT_COMPILE_COMMANDS=ON diff --git a/tools/minidef.exe b/tools/minidef.exe index b88b36e..23a98d3 100644 --- a/tools/minidef.exe +++ b/tools/minidef.exe @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:342a876b7327e975996fabb5e9b082a99ea830a81a86d1543aa25751a97c7583 -size 144896 +oid sha256:4b4dd6b889ae15863809233066d3bb8e99fd3395a09b5302d74fb00ed940fcdc +size 160768