From b1a79e3a6e090acff260d5043cd31d523c7bd6f5 Mon Sep 17 00:00:00 2001 From: MihailRis Date: Thu, 25 Apr 2024 05:12:45 +0300 Subject: [PATCH] block.material + minor refactor --- res/textures/gui/menubg.png | Bin 132 -> 5413 bytes src/engine.cpp | 2 +- src/frontend/screens/LevelScreen.cpp | 6 ++++-- src/frontend/screens/MenuScreen.cpp | 12 ++++++++---- src/graphics/ui/GUI.cpp | 6 ++---- src/graphics/ui/GUI.hpp | 4 +++- src/logic/scripting/lua/libblock.cpp | 13 +++++++++++++ src/util/platform.cpp | 4 ++-- src/voxels/DefaultWorldGenerator.cpp | 4 ++-- 9 files changed, 35 insertions(+), 16 deletions(-) diff --git a/res/textures/gui/menubg.png b/res/textures/gui/menubg.png index e3342a02adf4875a3e80e907a3d1686bd219e17e..54135f365eed8a4156acd3db618bc7f8a7768652 100644 GIT binary patch literal 5413 zcmeHKX;c$e8y-|ZSt=?Zptdn;KNTjKOeV_&f*?VNh^7HSP^**41V+e0GK7G&T5MEW zMFAD1ehQ~jtgTxCp=e8~%AysQx*%8=u!2Q!!4{WK=p>-R`TECm+Ws=IFsw8#aN97|#7^jZ~}NHC~W z9l;<>qzV8`jr(#jWBXJmb8muM@vyL&jIFDyc5r>S{d&gMm&_4$HB)zSNuYc4hpWal z_B=WA^OAC9mN|XOMzq>Cx^`k%;ECMl(~ECS`APqN8g=vDT4P1Z@VrN-er~zBGNE<( zs$X0$++D~x5K{BBA?w(v>$`?b7<#8RR7Qs6e=tmb#rN@W*&igxS^m`DoZO^7a{74p z+F1o;_4oFvJ-(CoTz1+p{hMj+>GI!018T;EI!?DK+*6fw;2618uN)FsPgN}O^!z<* znJ_smUw`01s;~HG2Yq>4PVEEDyrztf9Va*UG}TsZ%=0@O*A#T_;qD$&n)X`j4$h~e znY%MP&jpbY)X=voF<+>%GK2D-JgGHYsJ^)-f`|Xej8t&bhEyxWQ(`l z>6@&{k&?Y_iBx!YVY=7qcQl>ZNJ51DWziw~Ez4PcYfpz2qIvkOYMt9GsMR||qm#3aJ58Lh%0XUZm+dyJVUAb!=6tWJYQkwl^yqof zoIq~DgteZb+h&C?%_#+GPx|`PKHk z?Yr0D6%j!Rv&&rkGRKVj379h#T37TD;23LHd;%TjdCRVNilfmyBDjwea@|epc79K6c!$0#QcC5#73qsmAN3ed}^>yJc+jGS)%a zD>%(dTfV|8OSN{*E*r<+G8aZqcoOxXW8_3**bLuG{Op5Srz3$Ss|7wQw3~EawV7Rx z6tTg-aSJ-XH4m} zZTsZlibdFlGXP*?CWC@x(x9LhOO{@!J62@*h8~l-uIcsP&2+Q(jZdnT{nzL5%<-iT z!FybmnWHAm(L7Cm*ID|>r=Q=5)!jd|AX%4m>0;Gff6C2}|Dmt+XI`y*;bD zrLwj6+wMg_T;Bs-bjq~ZtMa^~oLPH2%6!&4-Q(kt@2wB}=|Zc7V|(UlMbX^7M}%h{ zc0Mak+j6uH*cIS+iaN%;#@KnSgsOjbd{k7nYqO#Gz16JH|J5d6`BhLKy!N>tSD`%L zb$pbfprJ}{Uz}YqdfuoS*ZH4+u<{aN?sAVSmE-%CKODQJtMMd!nRK3*5$qHAG2qGD z{N6`qVTaeWch6Hh@81uZP#MbFzKDSIKKTxA*)8_HtFIUH9COBKn zQIrkAY#0V<1ZYUrP?!nS7$#XL`Zy$n0oRi{iqvWt7EVl|O{T<5Cf(0?k)K)@9{!SE zW9V0b)`M-rbZia_Vyo5cfe{8O*hrJ~C-j#QhDiD-V#^7GHd&7o!A3$uO&Um{#9zki zlJ$w!a+ElmNF>xW)Ig8Q88l>wG+g#F!XiN&sn%JeXt4(&DN^-HtU%$!4Nl1;BVB1tt7L17j(IRXv> zK|($khEWbI;J*Sz5qbmdL<=VeVsZO;Ez=^Ri=lU-*20*R!xi@~tkR)pbwgBUO)p|lP}$MtpL z@t7u#px1Z5p+)~P|*sjgfN7w1Q?DDW;bY6R0^gi z0^{gP>1t>LS*u}8wMsc{Fghiku;>KA2nZn{%!`B&5zG_80&j>bf*>aQUnr5_W2l19 z0fijCing>+2`UJI3Pkw`!V{=)CB)+nPWo>skxv)*@0BP(U>*m>6d*1{VG!XecpwJj zFo?rSF2X|vIH7|7?h?6>hzk!c(T{D}n_u|WkNtnn?gI?i%<0+hYoiYd`pjX!JaqbP zVOb3S;HQ5@{evUW)NclPEq&j}^+vAOQsA|~Z`}1puGdoFwZL!O^|#68@anad(9r*7 zQ|On{nXc=P(J!=iim(s~5Dh2*wIgHiNV;W&E;Pmf0FGlUmkp4&!-HpYO8%Fel}8 zcfR|qqv_%Klr2SR0Y{^V#aqve^-%cjD%*UQrs?|xgw@<}u{{2;Yh^)^qbc*&5O(%`w0{WF)Q{|QrD=EVR2 literal 132 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`-kvUwAr*6yIsH%lJact(delta); + gui->act(delta, Viewport(Window::width, Window::height)); screen->update(delta); if (!Window::isIconified()) { diff --git a/src/frontend/screens/LevelScreen.cpp b/src/frontend/screens/LevelScreen.cpp index 47a68fa8..87c8963c 100644 --- a/src/frontend/screens/LevelScreen.cpp +++ b/src/frontend/screens/LevelScreen.cpp @@ -72,13 +72,15 @@ void LevelScreen::saveWorldPreview() { logger.info() << "saving world preview"; auto paths = engine->getPaths(); auto player = controller->getPlayer(); + auto& settings = engine->getSettings(); + int previewSize = settings.ui.worldPreviewSize.get(); + // camera special copy for world preview Camera camera = *player->camera; camera.setFov(glm::radians(70.0f)); - auto& settings = engine->getSettings(); - int previewSize = settings.ui.worldPreviewSize.get(); Viewport viewport(previewSize * 1.5, previewSize); GfxContext ctx(nullptr, viewport, batch.get()); + worldRenderer->draw(ctx, &camera, false, postProcessing.get()); auto image = postProcessing->toImage(); image->flipY(); diff --git a/src/frontend/screens/MenuScreen.cpp b/src/frontend/screens/MenuScreen.cpp index 8d4ca80b..1ddc317d 100644 --- a/src/frontend/screens/MenuScreen.cpp +++ b/src/frontend/screens/MenuScreen.cpp @@ -4,6 +4,7 @@ #include "../../graphics/ui/elements/Menu.hpp" #include "../../graphics/core/Batch2D.hpp" #include "../../graphics/core/Shader.hpp" +#include "../../graphics/core/Texture.hpp" #include "../../window/Window.h" #include "../../window/Camera.h" #include "../../engine.h" @@ -16,7 +17,7 @@ MenuScreen::MenuScreen(Engine* engine) : Screen(engine) { menu->reset(); menu->setPage("main"); - uicamera.reset(new Camera(glm::vec3(), Window::height)); + uicamera = std::make_unique(glm::vec3(), Window::height); uicamera->perspective = false; uicamera->flipped = true; } @@ -28,23 +29,26 @@ void MenuScreen::update(float delta) { } void MenuScreen::draw(float delta) { + auto assets = engine->getAssets(); + Window::clear(); Window::setBgColor(glm::vec3(0.2f)); uicamera->setFov(Window::height); - Shader* uishader = engine->getAssets()->getShader("ui"); + Shader* uishader = assets->getShader("ui"); uishader->use(); uishader->uniformMatrix("u_projview", uicamera->getProjView()); uint width = Window::width; uint height = Window::height; + auto bg = assets->getTexture("gui/menubg"); batch->begin(); - batch->texture(engine->getAssets()->getTexture("gui/menubg")); + batch->texture(bg); batch->rect( 0, 0, width, height, 0, 0, 0, - UVRegion(0, 0, width/64, height/64), + UVRegion(0, 0, width/bg->getWidth(), height/bg->getHeight()), false, false, glm::vec4(1.0f) ); batch->flush(); diff --git a/src/graphics/ui/GUI.cpp b/src/graphics/ui/GUI.cpp index 60350a1f..a8b291a8 100644 --- a/src/graphics/ui/GUI.cpp +++ b/src/graphics/ui/GUI.cpp @@ -113,16 +113,14 @@ void GUI::actFocused() { } } -/// @brief Processing user input and UI logic -/// @param delta delta time -void GUI::act(float delta) { +void GUI::act(float delta, const Viewport& vp) { while (!postRunnables.empty()) { runnable callback = postRunnables.back(); postRunnables.pop(); callback(); } - container->setSize(glm::vec2(Window::width, Window::height)); + container->setSize(vp.size()); container->act(delta); auto prevfocus = focus; diff --git a/src/graphics/ui/GUI.hpp b/src/graphics/ui/GUI.hpp index 85bdcdd8..d18972e2 100644 --- a/src/graphics/ui/GUI.hpp +++ b/src/graphics/ui/GUI.hpp @@ -11,6 +11,7 @@ #include "../../delegates.h" +class Viewport; class GfxContext; class Assets; class Camera; @@ -80,7 +81,8 @@ namespace gui { /// @brief Main input handling and logic update method /// @param delta delta time - void act(float delta); + /// @param viewport window size + void act(float delta, const Viewport& viewport); /// @brief Draw all visible elements on main container /// @param pctx parent graphics context diff --git a/src/logic/scripting/lua/libblock.cpp b/src/logic/scripting/lua/libblock.cpp index 2f0c18a8..85c56240 100644 --- a/src/logic/scripting/lua/libblock.cpp +++ b/src/logic/scripting/lua/libblock.cpp @@ -22,6 +22,18 @@ int l_block_name(lua_State* L) { return 1; } + +int l_block_material(lua_State* L) { + auto indices = scripting::content->getIndices(); + lua::luaint id = lua_tointeger(L, 1); + if (id < 0 || size_t(id) >= indices->countBlockDefs()) { + return 0; + } + auto def = indices->getBlockDef(id); + lua_pushstring(L, def->material.c_str()); + return 1; +} + int l_is_solid_at(lua_State* L) { lua::luaint x = lua_tointeger(L, 1); lua::luaint y = lua_tointeger(L, 2); @@ -218,6 +230,7 @@ int l_is_replaceable_at(lua_State* L) { const luaL_Reg blocklib [] = { {"index", lua_wrap_errors}, {"name", lua_wrap_errors}, + {"material", lua_wrap_errors}, {"defs_count", lua_wrap_errors}, {"is_solid_at", lua_wrap_errors}, {"is_replaceable_at", lua_wrap_errors}, diff --git a/src/util/platform.cpp b/src/util/platform.cpp index 0ffc884f..9de3f4d4 100644 --- a/src/util/platform.cpp +++ b/src/util/platform.cpp @@ -7,7 +7,7 @@ #include "../typedefs.h" -#ifdef WIN32 +#ifdef _WIN32 #include #include "./stringutil.h" @@ -41,4 +41,4 @@ std::string platform::detect_locale() { return preferredLocaleName.substr(0, 5); } -#endif \ No newline at end of file +#endif diff --git a/src/voxels/DefaultWorldGenerator.cpp b/src/voxels/DefaultWorldGenerator.cpp index f453d94f..77bf8ad8 100644 --- a/src/voxels/DefaultWorldGenerator.cpp +++ b/src/voxels/DefaultWorldGenerator.cpp @@ -18,7 +18,7 @@ #include "../maths/util.h" #include "../core_defs.h" -// TODO: do something with long conditions + move magic numbers to constants +// will be refactored in generators update const int SEA_LEVEL = 55; @@ -204,4 +204,4 @@ void DefaultWorldGenerator::generate(voxel* voxels, int cx, int cz, int seed){ } } } -} \ No newline at end of file +}