refactor
This commit is contained in:
@@ -42,7 +42,7 @@ static std::shared_ptr<Label> create_label(wstringsupplier supplier) {
|
||||
// TODO: move to xml
|
||||
// TODO: move to xml finally
|
||||
std::shared_ptr<UINode> create_debug_panel(
|
||||
Engine* engine,
|
||||
Engine& engine,
|
||||
Level& level,
|
||||
Player& player,
|
||||
bool allowDebugCheats
|
||||
@@ -56,8 +56,8 @@ std::shared_ptr<UINode> create_debug_panel(
|
||||
static int fpsMax = fps;
|
||||
static std::wstring fpsString = L"";
|
||||
|
||||
panel->listenInterval(0.016f, [engine]() {
|
||||
fps = 1.0f / engine->getTime().getDelta();
|
||||
panel->listenInterval(0.016f, [&engine]() {
|
||||
fps = 1.0f / engine.getTime().getDelta();
|
||||
fpsMin = std::min(fps, fpsMin);
|
||||
fpsMax = std::max(fps, fpsMax);
|
||||
});
|
||||
@@ -84,8 +84,8 @@ std::shared_ptr<UINode> create_debug_panel(
|
||||
panel->add(create_label([]() {
|
||||
return L"lua-stack: " + std::to_wstring(scripting::get_values_on_stack());
|
||||
}));
|
||||
panel->add(create_label([=]() {
|
||||
auto& settings = engine->getSettings();
|
||||
panel->add(create_label([&engine]() {
|
||||
auto& settings = engine.getSettings();
|
||||
bool culling = settings.graphics.frustumCulling.get();
|
||||
return L"frustum-culling: "+std::wstring(culling ? L"on" : L"off");
|
||||
}));
|
||||
|
||||
+13
-13
@@ -59,8 +59,8 @@ using namespace gui;
|
||||
bool Hud::showGeneratorMinimap = false;
|
||||
|
||||
// implemented in debug_panel.cpp
|
||||
extern std::shared_ptr<UINode> create_debug_panel(
|
||||
Engine* engine,
|
||||
std::shared_ptr<UINode> create_debug_panel(
|
||||
Engine& engine,
|
||||
Level& level,
|
||||
Player& player,
|
||||
bool allowDebugCheats
|
||||
@@ -148,10 +148,10 @@ std::shared_ptr<InventoryView> Hud::createHotbar() {
|
||||
|
||||
static constexpr uint WORLDGEN_IMG_SIZE = 128U;
|
||||
|
||||
Hud::Hud(Engine* engine, LevelFrontend& frontend, Player& player)
|
||||
Hud::Hud(Engine& engine, LevelFrontend& frontend, Player& player)
|
||||
: engine(engine),
|
||||
assets(engine->getAssets()),
|
||||
gui(engine->getGUI()),
|
||||
assets(*engine.getAssets()),
|
||||
gui(engine.getGUI()),
|
||||
frontend(frontend),
|
||||
player(player),
|
||||
debugImgWorldGen(std::make_unique<ImageData>(
|
||||
@@ -191,7 +191,7 @@ Hud::Hud(Engine* engine, LevelFrontend& frontend, Player& player)
|
||||
dplotter->setInteractive(false);
|
||||
add(HudElement(hud_element_mode::permanent, nullptr, dplotter, true));
|
||||
|
||||
assets->store(Texture::from(debugImgWorldGen.get()), DEBUG_WORLDGEN_IMAGE);
|
||||
assets.store(Texture::from(debugImgWorldGen.get()), DEBUG_WORLDGEN_IMAGE);
|
||||
|
||||
debugMinimap = guiutil::create(
|
||||
"<image src='"+DEBUG_WORLDGEN_IMAGE+
|
||||
@@ -312,8 +312,8 @@ void Hud::updateWorldGenDebugVisualization() {
|
||||
data[(flippedZ * width + x) * 4 + 3] = 150;
|
||||
}
|
||||
}
|
||||
auto texture = assets->get<Texture>(DEBUG_WORLDGEN_IMAGE);
|
||||
texture->reload(*debugImgWorldGen);
|
||||
auto& texture = assets.require<Texture>(DEBUG_WORLDGEN_IMAGE);
|
||||
texture.reload(*debugImgWorldGen);
|
||||
}
|
||||
|
||||
void Hud::update(bool visible) {
|
||||
@@ -377,7 +377,7 @@ void Hud::openInventory() {
|
||||
|
||||
inventoryOpen = true;
|
||||
auto inventory = player.getInventory();
|
||||
auto inventoryDocument = assets->get<UiDocument>("core:inventory");
|
||||
auto inventoryDocument = assets.get<UiDocument>("core:inventory");
|
||||
inventoryView = std::dynamic_pointer_cast<InventoryView>(inventoryDocument->getRoot());
|
||||
inventoryView->bind(inventory, content);
|
||||
add(HudElement(hud_element_mode::inventory_bound, inventoryDocument, inventoryView, false));
|
||||
@@ -569,15 +569,15 @@ void Hud::draw(const DrawContext& ctx){
|
||||
auto batch = ctx.getBatch2D();
|
||||
batch->begin();
|
||||
|
||||
auto uishader = assets->get<Shader>("ui");
|
||||
uishader->use();
|
||||
uishader->uniformMatrix("u_projview", uicamera->getProjView());
|
||||
auto& uishader = assets.require<Shader>("ui");
|
||||
uishader.use();
|
||||
uishader.uniformMatrix("u_projview", uicamera->getProjView());
|
||||
|
||||
// Crosshair
|
||||
if (!pause && !inventoryOpen && !player.debug) {
|
||||
DrawContext chctx = ctx.sub(batch);
|
||||
chctx.setBlendMode(BlendMode::inversion);
|
||||
auto texture = assets->get<Texture>("gui/crosshair");
|
||||
auto texture = assets.get<Texture>("gui/crosshair");
|
||||
batch->texture(texture);
|
||||
int chsizex = texture != nullptr ? texture->getWidth() : 16;
|
||||
int chsizey = texture != nullptr ? texture->getHeight() : 16;
|
||||
|
||||
@@ -70,8 +70,8 @@ public:
|
||||
};
|
||||
|
||||
class Hud : public util::ObjectsKeeper {
|
||||
Engine* engine;
|
||||
Assets* assets;
|
||||
Engine& engine;
|
||||
Assets& assets;
|
||||
std::unique_ptr<Camera> uicamera;
|
||||
gui::GUI* gui;
|
||||
LevelFrontend& frontend;
|
||||
@@ -131,7 +131,7 @@ class Hud : public util::ObjectsKeeper {
|
||||
void showExchangeSlot();
|
||||
void updateWorldGenDebugVisualization();
|
||||
public:
|
||||
Hud(Engine* engine, LevelFrontend& frontend, Player& player);
|
||||
Hud(Engine& engine, LevelFrontend& frontend, Player& player);
|
||||
~Hud();
|
||||
|
||||
void update(bool hudVisible);
|
||||
|
||||
+29
-25
@@ -24,8 +24,8 @@
|
||||
namespace fs = std::filesystem;
|
||||
using namespace gui;
|
||||
|
||||
void menus::create_version_label(Engine* engine) {
|
||||
auto gui = engine->getGUI();
|
||||
void menus::create_version_label(Engine& engine) {
|
||||
auto gui = engine.getGUI();
|
||||
auto text = ENGINE_VERSION_STRING+" debug build";
|
||||
gui->add(guiutil::create(
|
||||
"<label z-index='1000' color='#FFFFFF80' gravity='top-right' margin='4'>"
|
||||
@@ -34,8 +34,8 @@ void menus::create_version_label(Engine* engine) {
|
||||
));
|
||||
}
|
||||
|
||||
gui::page_loader_func menus::create_page_loader(Engine* engine) {
|
||||
return [=](const std::string& query) {
|
||||
gui::page_loader_func menus::create_page_loader(Engine& engine) {
|
||||
return [&](const std::string& query) {
|
||||
std::vector<dv::value> args;
|
||||
|
||||
std::string name;
|
||||
@@ -58,75 +58,79 @@ gui::page_loader_func menus::create_page_loader(Engine* engine) {
|
||||
name = query;
|
||||
}
|
||||
|
||||
auto file = engine->getResPaths()->find("layouts/pages/"+name+".xml");
|
||||
auto file = engine.getResPaths()->find("layouts/pages/"+name+".xml");
|
||||
auto fullname = "core:pages/"+name;
|
||||
|
||||
auto document_ptr = UiDocument::read(
|
||||
auto documentPtr = UiDocument::read(
|
||||
scripting::get_root_environment(),
|
||||
fullname,
|
||||
file,
|
||||
"core:layouts/pages/" + name
|
||||
);
|
||||
auto document = document_ptr.get();
|
||||
engine->getAssets()->store(std::move(document_ptr), fullname);
|
||||
auto document = documentPtr.get();
|
||||
engine.getAssets()->store(std::move(documentPtr), fullname);
|
||||
scripting::on_ui_open(document, std::move(args));
|
||||
return document->getRoot();
|
||||
};
|
||||
}
|
||||
|
||||
bool menus::call(Engine* engine, runnable func) {
|
||||
bool menus::call(Engine& engine, runnable func) {
|
||||
if (engine.isHeadless()) {
|
||||
throw std::runtime_error("menus::call(...) in headless mode");
|
||||
}
|
||||
auto gui = engine.getGUI();
|
||||
try {
|
||||
func();
|
||||
return true;
|
||||
} catch (const contentpack_error& error) {
|
||||
engine->setScreen(std::make_shared<MenuScreen>(engine));
|
||||
engine.setScreen(std::make_shared<MenuScreen>(engine));
|
||||
// could not to find or read pack
|
||||
guiutil::alert(
|
||||
engine->getGUI(), langs::get(L"error.pack-not-found")+L": "+
|
||||
gui, langs::get(L"error.pack-not-found")+L": "+
|
||||
util::str2wstr_utf8(error.getPackId())
|
||||
);
|
||||
return false;
|
||||
} catch (const assetload::error& error) {
|
||||
engine->setScreen(std::make_shared<MenuScreen>(engine));
|
||||
engine.setScreen(std::make_shared<MenuScreen>(engine));
|
||||
guiutil::alert(
|
||||
engine->getGUI(), langs::get(L"Assets Load Error", L"menu")+L":\n"+
|
||||
gui, langs::get(L"Assets Load Error", L"menu")+L":\n"+
|
||||
util::str2wstr_utf8(error.what())
|
||||
);
|
||||
return false;
|
||||
} catch (const parsing_error& error) {
|
||||
engine->setScreen(std::make_shared<MenuScreen>(engine));
|
||||
guiutil::alert(engine->getGUI(), util::str2wstr_utf8(error.errorLog()));
|
||||
engine.setScreen(std::make_shared<MenuScreen>(engine));
|
||||
guiutil::alert(gui, util::str2wstr_utf8(error.errorLog()));
|
||||
return false;
|
||||
} catch (const std::runtime_error& error) {
|
||||
engine->setScreen(std::make_shared<MenuScreen>(engine));
|
||||
engine.setScreen(std::make_shared<MenuScreen>(engine));
|
||||
guiutil::alert(
|
||||
engine->getGUI(), langs::get(L"Content Error", L"menu")+L":\n"+
|
||||
gui, langs::get(L"Content Error", L"menu")+L":\n"+
|
||||
util::str2wstr_utf8(error.what())
|
||||
);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
UiDocument* menus::show(Engine* engine, const std::string& name, std::vector<dv::value> args) {
|
||||
auto menu = engine->getGUI()->getMenu();
|
||||
auto file = engine->getResPaths()->find("layouts/"+name+".xml");
|
||||
UiDocument* menus::show(Engine& engine, const std::string& name, std::vector<dv::value> args) {
|
||||
auto menu = engine.getGUI()->getMenu();
|
||||
auto file = engine.getResPaths()->find("layouts/"+name+".xml");
|
||||
auto fullname = "core:layouts/"+name;
|
||||
|
||||
auto document_ptr = UiDocument::read(
|
||||
auto documentPtr = UiDocument::read(
|
||||
scripting::get_root_environment(), fullname, file, "core:layouts/"+name
|
||||
);
|
||||
auto document = document_ptr.get();
|
||||
engine->getAssets()->store(std::move(document_ptr), fullname);
|
||||
auto document = documentPtr.get();
|
||||
engine.getAssets()->store(std::move(documentPtr), fullname);
|
||||
scripting::on_ui_open(document, std::move(args));
|
||||
menu->addPage(name, document->getRoot());
|
||||
menu->setPage(name);
|
||||
return document;
|
||||
}
|
||||
|
||||
void menus::show_process_panel(Engine* engine, const std::shared_ptr<Task>& task, const std::wstring& text) {
|
||||
void menus::show_process_panel(Engine& engine, const std::shared_ptr<Task>& task, const std::wstring& text) {
|
||||
uint initialWork = task->getWorkTotal();
|
||||
|
||||
auto menu = engine->getGUI()->getMenu();
|
||||
auto menu = engine.getGUI()->getMenu();
|
||||
menu->reset();
|
||||
auto doc = menus::show(engine, "process", {
|
||||
util::wstr2str_utf8(langs::get(text))
|
||||
|
||||
@@ -14,17 +14,17 @@ class UiDocument;
|
||||
|
||||
namespace menus {
|
||||
/// @brief Create development version label at the top-right screen corner
|
||||
void create_version_label(Engine* engine);
|
||||
void create_version_label(Engine& engine);
|
||||
|
||||
gui::page_loader_func create_page_loader(Engine* engine);
|
||||
gui::page_loader_func create_page_loader(Engine& engine);
|
||||
|
||||
UiDocument* show(
|
||||
Engine* engine,
|
||||
Engine& engine,
|
||||
const std::string& name,
|
||||
std::vector<dv::value> args
|
||||
);
|
||||
|
||||
void show_process_panel(Engine* engine, const std::shared_ptr<Task>& task, const std::wstring& text=L"");
|
||||
void show_process_panel(Engine& engine, const std::shared_ptr<Task>& task, const std::wstring& text=L"");
|
||||
|
||||
bool call(Engine* engine, runnable func);
|
||||
bool call(Engine& engine, runnable func);
|
||||
}
|
||||
|
||||
@@ -34,19 +34,19 @@
|
||||
|
||||
static debug::Logger logger("level-screen");
|
||||
|
||||
LevelScreen::LevelScreen(Engine* engine, std::unique_ptr<Level> levelPtr)
|
||||
LevelScreen::LevelScreen(Engine& engine, std::unique_ptr<Level> levelPtr)
|
||||
: Screen(engine), postProcessing(std::make_unique<PostProcessing>())
|
||||
{
|
||||
Level* level = levelPtr.get();
|
||||
|
||||
auto& settings = engine->getSettings();
|
||||
auto& assets = *engine->getAssets();
|
||||
auto menu = engine->getGUI()->getMenu();
|
||||
auto& settings = engine.getSettings();
|
||||
auto& assets = *engine.getAssets();
|
||||
auto menu = engine.getGUI()->getMenu();
|
||||
menu->reset();
|
||||
|
||||
auto player = level->players->get(0);
|
||||
controller =
|
||||
std::make_unique<LevelController>(engine, std::move(levelPtr), player);
|
||||
std::make_unique<LevelController>(&engine, std::move(levelPtr), player);
|
||||
playerController = std::make_unique<PlayerController>(
|
||||
settings,
|
||||
level,
|
||||
@@ -58,12 +58,12 @@ LevelScreen::LevelScreen(Engine* engine, std::unique_ptr<Level> levelPtr)
|
||||
player, controller.get(), assets
|
||||
);
|
||||
worldRenderer = std::make_unique<WorldRenderer>(
|
||||
engine, *frontend, player
|
||||
engine, *frontend, *player
|
||||
);
|
||||
hud = std::make_unique<Hud>(engine, *frontend, *player);
|
||||
|
||||
decorator = std::make_unique<Decorator>(
|
||||
*engine, *controller, *worldRenderer, assets, *player
|
||||
engine, *controller, *worldRenderer, assets, *player
|
||||
);
|
||||
|
||||
keepAlive(settings.graphics.backlight.observe([=](bool) {
|
||||
@@ -111,15 +111,15 @@ LevelScreen::~LevelScreen() {
|
||||
// unblock all bindings
|
||||
Events::enableBindings();
|
||||
controller->onWorldQuit();
|
||||
engine->getPaths()->setCurrentWorldFolder(fs::path());
|
||||
engine.getPaths().setCurrentWorldFolder(fs::path());
|
||||
}
|
||||
|
||||
void LevelScreen::saveWorldPreview() {
|
||||
try {
|
||||
logger.info() << "saving world preview";
|
||||
auto paths = engine->getPaths();
|
||||
const auto& paths = engine.getPaths();
|
||||
auto player = playerController->getPlayer();
|
||||
auto& settings = engine->getSettings();
|
||||
auto& settings = engine.getSettings();
|
||||
int previewSize = settings.ui.worldPreviewSize.get();
|
||||
|
||||
// camera special copy for world preview
|
||||
@@ -134,7 +134,7 @@ void LevelScreen::saveWorldPreview() {
|
||||
worldRenderer->draw(ctx, camera, false, true, 0.0f, postProcessing.get());
|
||||
auto image = postProcessing->toImage();
|
||||
image->flipY();
|
||||
imageio::write(paths->resolve("world:preview.png").u8string(), image.get());
|
||||
imageio::write(paths.resolve("world:preview.png").u8string(), image.get());
|
||||
} catch (const std::exception& err) {
|
||||
logger.error() << err.what();
|
||||
}
|
||||
@@ -142,7 +142,7 @@ void LevelScreen::saveWorldPreview() {
|
||||
|
||||
void LevelScreen::updateHotkeys() {
|
||||
auto player = playerController->getPlayer();
|
||||
auto& settings = engine->getSettings();
|
||||
auto& settings = engine.getSettings();
|
||||
if (Events::jpressed(keycode::O)) {
|
||||
settings.graphics.frustumCulling.toggle();
|
||||
}
|
||||
@@ -155,7 +155,7 @@ void LevelScreen::updateHotkeys() {
|
||||
}
|
||||
|
||||
void LevelScreen::update(float delta) {
|
||||
gui::GUI* gui = engine->getGUI();
|
||||
gui::GUI* gui = engine.getGUI();
|
||||
|
||||
bool inputLocked = hud->isPause() ||
|
||||
hud->isInventoryOpen() ||
|
||||
@@ -181,7 +181,7 @@ void LevelScreen::update(float delta) {
|
||||
glm::vec3(0, 1, 0)
|
||||
);
|
||||
auto level = controller->getLevel();
|
||||
const auto& settings = engine->getSettings();
|
||||
const auto& settings = engine.getSettings();
|
||||
|
||||
if (!hud->isPause()) {
|
||||
level->getWorld()->updateTimers(delta);
|
||||
@@ -204,7 +204,7 @@ void LevelScreen::draw(float delta) {
|
||||
DrawContext ctx(nullptr, viewport, batch.get());
|
||||
|
||||
if (!hud->isPause()) {
|
||||
scripting::on_entities_render(engine->getTime().getDelta());
|
||||
scripting::on_entities_render(engine.getTime().getDelta());
|
||||
}
|
||||
worldRenderer->draw(
|
||||
ctx, *camera, hudVisible, hud->isPause(), delta, postProcessing.get()
|
||||
|
||||
@@ -33,7 +33,7 @@ class LevelScreen : public Screen {
|
||||
void initializeContent();
|
||||
void initializePack(ContentPackRuntime* pack);
|
||||
public:
|
||||
LevelScreen(Engine* engine, std::unique_ptr<Level> level);
|
||||
LevelScreen(Engine& engine, std::unique_ptr<Level> level);
|
||||
~LevelScreen();
|
||||
|
||||
void update(float delta) override;
|
||||
|
||||
@@ -10,10 +10,10 @@
|
||||
#include "window/Camera.hpp"
|
||||
#include "engine.hpp"
|
||||
|
||||
MenuScreen::MenuScreen(Engine* engine) : Screen(engine) {
|
||||
engine->resetContent();
|
||||
MenuScreen::MenuScreen(Engine& engine) : Screen(engine) {
|
||||
engine.resetContent();
|
||||
|
||||
auto menu = engine->getGUI()->getMenu();
|
||||
auto menu = engine.getGUI()->getMenu();
|
||||
menu->reset();
|
||||
menu->setPage("main");
|
||||
|
||||
@@ -29,7 +29,7 @@ void MenuScreen::update(float delta) {
|
||||
}
|
||||
|
||||
void MenuScreen::draw(float delta) {
|
||||
auto assets = engine->getAssets();
|
||||
auto assets = engine.getAssets();
|
||||
|
||||
Window::clear();
|
||||
Window::setBgColor(glm::vec3(0.2f));
|
||||
|
||||
@@ -10,7 +10,7 @@ class Engine;
|
||||
class MenuScreen : public Screen {
|
||||
std::unique_ptr<Camera> uicamera;
|
||||
public:
|
||||
MenuScreen(Engine* engine);
|
||||
MenuScreen(Engine& engine);
|
||||
~MenuScreen();
|
||||
|
||||
void update(float delta) override;
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
#include "graphics/core/Batch2D.hpp"
|
||||
#include "engine.hpp"
|
||||
|
||||
Screen::Screen(Engine* engine)
|
||||
Screen::Screen(Engine& engine)
|
||||
: engine(engine),
|
||||
batch(std::make_unique<Batch2D>(1024)) {
|
||||
}
|
||||
|
||||
@@ -8,10 +8,10 @@ class Batch2D;
|
||||
/// @brief Screen is a mainloop state
|
||||
class Screen : public util::ObjectsKeeper {
|
||||
protected:
|
||||
Engine* engine;
|
||||
Engine& engine;
|
||||
std::unique_ptr<Batch2D> batch;
|
||||
public:
|
||||
Screen(Engine* engine);
|
||||
Screen(Engine& engine);
|
||||
virtual ~Screen();
|
||||
virtual void update(float delta) = 0;
|
||||
virtual void draw(float delta) = 0;
|
||||
|
||||
Reference in New Issue
Block a user