diff --git a/flake.nix b/flake.nix index 2c392d27..bc9ead2b 100644 --- a/flake.nix +++ b/flake.nix @@ -1,16 +1,69 @@ { + description = "VoxelCore – voxel game engine in C++"; + inputs = { nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable"; flake-utils.url = "github:numtide/flake-utils"; }; - outputs = { self, nixpkgs, flake-utils }: - flake-utils.lib.eachDefaultSystem (system: { - devShells.default = with nixpkgs.legacyPackages.${system}; mkShell { - nativeBuildInputs = [ cmake pkg-config ]; - buildInputs = [ glm glfw glew zlib libpng libvorbis openal luajit curl ]; # libglvnd - packages = [ glfw mesa freeglut entt ]; - LD_LIBRARY_PATH = "${wayland}/lib:$LD_LIBRARY_PATH"; + outputs = + { + self, + nixpkgs, + flake-utils, + }: + flake-utils.lib.eachDefaultSystem ( + system: + let + pkgs = import nixpkgs { inherit system; }; + voxel-core = pkgs.stdenv.mkDerivation { + name = "voxel-core"; + + src = ./.; + + nativeBuildInputs = with pkgs; [ + cmake + pkg-config + ]; + + buildInputs = with pkgs; [ + glm + glfw + glew + zlib + libpng + libvorbis + openal + luajit + curl + entt + mesa + freeglut + ]; # libglvnd + + packages = with pkgs; [ + glfw + mesa + freeglut + entt + ]; + cmakeFlags = [ + "-DCMAKE_PREFIX_PATH=${pkgs.entt}" + "-DCMAKE_INCLUDE_PATH=${pkgs.entt}/include" + ]; + + installPhase = '' + mkdir -p $out/bin + cp VoxelEngine $out/bin/ + ''; }; - }); + in + { + packages.default = voxel-core; + apps.default = { + type = "app"; + program = "${voxel-core}/bin/VoxelCore"; + }; + } + ); } diff --git a/src/frontend/hud.cpp b/src/frontend/hud.cpp index 60cee6c4..08dfcf40 100644 --- a/src/frontend/hud.cpp +++ b/src/frontend/hud.cpp @@ -538,6 +538,7 @@ void Hud::closeInventory() { exchangeSlotInv = nullptr; inventoryOpen = false; inventoryView = nullptr; + secondInvView = nullptr; secondUI = nullptr; for (auto& element : elements) { @@ -597,6 +598,9 @@ void Hud::remove(const std::shared_ptr& node) { } } cleanup(); + if (node == secondUI) { + closeInventory(); + } } void Hud::setDebug(bool flag) { diff --git a/src/graphics/core/Batch3D.cpp b/src/graphics/core/Batch3D.cpp index 8f222a51..df6fdef7 100644 --- a/src/graphics/core/Batch3D.cpp +++ b/src/graphics/core/Batch3D.cpp @@ -126,7 +126,15 @@ void Batch3D::sprite( float scale = 1.0f / static_cast(atlasRes); float u = (index % atlasRes) * scale; float v = 1.0f - ((index / atlasRes) * scale) - scale; - sprite(pos, up, right, w, h, UVRegion(u, v, u+scale, v+scale), tint); + sprite( + pos + right * w + up * h, // revert centering + up, + right, + w, + h, + UVRegion(u, v, u + scale, v + scale), + tint + ); } void Batch3D::sprite( diff --git a/src/graphics/render/TextsRenderer.cpp b/src/graphics/render/TextsRenderer.cpp index 9e4210df..4b905e13 100644 --- a/src/graphics/render/TextsRenderer.cpp +++ b/src/graphics/render/TextsRenderer.cpp @@ -51,6 +51,7 @@ void TextsRenderer::renderNote( glm::vec3 yvec = note.getAxisY(); int width = font.calcWidth(text, text.length()); + int height = font.getLineHeight(); if (preset.displayMode == NoteDisplayMode::Y_FREE_BILLBOARD || preset.displayMode == NoteDisplayMode::XY_FREE_BILLBOARD) { xvec = camera.position - pos; @@ -96,8 +97,11 @@ void TextsRenderer::renderNote( pos = screenPos / screenPos.w; } - } else if (!frustum.isBoxVisible(pos - xvec * (width * 0.5f * preset.scale), - pos + xvec * (width * 0.5f * preset.scale))) { + } else if (!frustum.isBoxVisible( + pos - xvec * (width * 0.5f) * preset.scale, + pos + xvec * (width * 0.5f) * preset.scale + + yvec * static_cast(height) * preset.scale + )) { return; } auto color = preset.color; diff --git a/src/logic/scripting/lua/libs/libhud.cpp b/src/logic/scripting/lua/libs/libhud.cpp index 988685cc..432d8eb6 100644 --- a/src/logic/scripting/lua/libs/libhud.cpp +++ b/src/logic/scripting/lua/libs/libhud.cpp @@ -46,7 +46,7 @@ static int l_open(lua::State* L) { } return lua::pushinteger(L, hud->openInventory( layout, - level->inventories->get(invid), + lua::isnoneornil(L, 3) ? nullptr : level->inventories->get(invid), playerInventory )->getId()); }