hud refactor (part III)
This commit is contained in:
parent
e493c67dfa
commit
4f6ba8cca6
@ -36,11 +36,9 @@ using glm::mat4;
|
|||||||
using std::string;
|
using std::string;
|
||||||
using std::shared_ptr;
|
using std::shared_ptr;
|
||||||
|
|
||||||
WorldRenderer::WorldRenderer(Engine* engine,
|
WorldRenderer::WorldRenderer(Engine* engine, LevelFrontend* frontend)
|
||||||
Level* level,
|
|
||||||
LevelFrontend* frontend)
|
|
||||||
: engine(engine),
|
: engine(engine),
|
||||||
level(level),
|
level(frontend->getLevel()),
|
||||||
frustumCulling(new Frustum()),
|
frustumCulling(new Frustum()),
|
||||||
lineBatch(new LineBatch()),
|
lineBatch(new LineBatch()),
|
||||||
renderer(new ChunksRenderer(level,
|
renderer(new ChunksRenderer(level,
|
||||||
|
|||||||
@ -34,7 +34,7 @@ class WorldRenderer {
|
|||||||
bool drawChunk(size_t index, Camera* camera, Shader* shader, bool culling);
|
bool drawChunk(size_t index, Camera* camera, Shader* shader, bool culling);
|
||||||
void drawChunks(Chunks* chunks, Camera* camera, Shader* shader);
|
void drawChunks(Chunks* chunks, Camera* camera, Shader* shader);
|
||||||
public:
|
public:
|
||||||
WorldRenderer(Engine* engine, Level* level, LevelFrontend* frontend);
|
WorldRenderer(Engine* engine, LevelFrontend* frontend);
|
||||||
~WorldRenderer();
|
~WorldRenderer();
|
||||||
|
|
||||||
void draw(const GfxContext& context, Camera* camera);
|
void draw(const GfxContext& context, Camera* camera);
|
||||||
|
|||||||
@ -55,6 +55,8 @@ inline std::shared_ptr<Label> create_label(gui::wstringsupplier supplier) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void HudRenderer::createDebugPanel(Engine* engine) {
|
void HudRenderer::createDebugPanel(Engine* engine) {
|
||||||
|
auto level = frontend->getLevel();
|
||||||
|
|
||||||
Panel* panel = new Panel(vec2(250, 200), vec4(5.0f), 1.0f);
|
Panel* panel = new Panel(vec2(250, 200), vec4(5.0f), 1.0f);
|
||||||
debugPanel = std::shared_ptr<UINode>(panel);
|
debugPanel = std::shared_ptr<UINode>(panel);
|
||||||
panel->listenInterval(1.0f, [this]() {
|
panel->listenInterval(1.0f, [this]() {
|
||||||
@ -72,11 +74,11 @@ void HudRenderer::createDebugPanel(Engine* engine) {
|
|||||||
bool culling = settings.graphics.frustumCulling;
|
bool culling = settings.graphics.frustumCulling;
|
||||||
return L"frustum-culling: "+std::wstring(culling ? L"on" : L"off");
|
return L"frustum-culling: "+std::wstring(culling ? L"on" : L"off");
|
||||||
}));
|
}));
|
||||||
panel->add(create_label([this]() {
|
panel->add(create_label([=]() {
|
||||||
return L"chunks: "+std::to_wstring(level->chunks->chunksCount)+
|
return L"chunks: "+std::to_wstring(level->chunks->chunksCount)+
|
||||||
L" visible: "+std::to_wstring(level->chunks->visible);
|
L" visible: "+std::to_wstring(level->chunks->visible);
|
||||||
}));
|
}));
|
||||||
panel->add(create_label([this](){
|
panel->add(create_label([=](){
|
||||||
auto player = level->player;
|
auto player = level->player;
|
||||||
auto indices = level->content->indices;
|
auto indices = level->content->indices;
|
||||||
auto def = indices->getBlockDef(player->selectedVoxel.id);
|
auto def = indices->getBlockDef(player->selectedVoxel.id);
|
||||||
@ -88,7 +90,7 @@ void HudRenderer::createDebugPanel(Engine* engine) {
|
|||||||
return L"block: "+std::to_wstring(player->selectedVoxel.id)+
|
return L"block: "+std::to_wstring(player->selectedVoxel.id)+
|
||||||
L" "+stream.str();
|
L" "+stream.str();
|
||||||
}));
|
}));
|
||||||
panel->add(create_label([this](){
|
panel->add(create_label([=](){
|
||||||
return L"seed: "+std::to_wstring(level->world->seed);
|
return L"seed: "+std::to_wstring(level->world->seed);
|
||||||
}));
|
}));
|
||||||
|
|
||||||
@ -105,15 +107,15 @@ void HudRenderer::createDebugPanel(Engine* engine) {
|
|||||||
|
|
||||||
// Coord input
|
// Coord input
|
||||||
TextBox* box = new TextBox(L"");
|
TextBox* box = new TextBox(L"");
|
||||||
box->textSupplier([this, ax]() {
|
box->textSupplier([=]() {
|
||||||
Hitbox* hitbox = this->level->player->hitbox;
|
Hitbox* hitbox = level->player->hitbox;
|
||||||
return std::to_wstring(hitbox->position[ax]);
|
return std::to_wstring(hitbox->position[ax]);
|
||||||
});
|
});
|
||||||
box->textConsumer([this, ax](std::wstring text) {
|
box->textConsumer([=](std::wstring text) {
|
||||||
try {
|
try {
|
||||||
vec3 position = this->level->player->hitbox->position;
|
vec3 position = level->player->hitbox->position;
|
||||||
position[ax] = std::stoi(text);
|
position[ax] = std::stoi(text);
|
||||||
this->level->player->teleport(position);
|
level->player->teleport(position);
|
||||||
} catch (std::invalid_argument& _){
|
} catch (std::invalid_argument& _){
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@ -121,9 +123,9 @@ void HudRenderer::createDebugPanel(Engine* engine) {
|
|||||||
sub->add(box);
|
sub->add(box);
|
||||||
panel->add(sub);
|
panel->add(sub);
|
||||||
}
|
}
|
||||||
panel->add(create_label([this](){
|
panel->add(create_label([=](){
|
||||||
int hour, minute, second;
|
int hour, minute, second;
|
||||||
timeutil::from_value(this->level->world->daytime, hour, minute, second);
|
timeutil::from_value(level->world->daytime, hour, minute, second);
|
||||||
|
|
||||||
std::wstring timeString =
|
std::wstring timeString =
|
||||||
util::lfill(std::to_wstring(hour), 2, L'0') + L":" +
|
util::lfill(std::to_wstring(hour), 2, L'0') + L":" +
|
||||||
@ -171,14 +173,12 @@ void HudRenderer::createDebugPanel(Engine* engine) {
|
|||||||
panel->refresh();
|
panel->refresh();
|
||||||
}
|
}
|
||||||
|
|
||||||
HudRenderer::HudRenderer(Engine* engine,
|
HudRenderer::HudRenderer(Engine* engine, LevelFrontend* frontend)
|
||||||
Level* level,
|
: assets(engine->getAssets()),
|
||||||
LevelFrontend* frontend)
|
|
||||||
: level(level),
|
|
||||||
assets(engine->getAssets()),
|
|
||||||
gui(engine->getGUI()),
|
gui(engine->getGUI()),
|
||||||
frontend(frontend) {
|
frontend(frontend) {
|
||||||
|
|
||||||
|
auto level = frontend->getLevel();
|
||||||
auto menu = gui->getMenu();
|
auto menu = gui->getMenu();
|
||||||
auto content = level->content;
|
auto content = level->content;
|
||||||
auto indices = content->indices;
|
auto indices = content->indices;
|
||||||
@ -242,6 +242,7 @@ void HudRenderer::update() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void HudRenderer::draw(const GfxContext& ctx){
|
void HudRenderer::draw(const GfxContext& ctx){
|
||||||
|
auto level = frontend->getLevel();
|
||||||
const Content* content = level->content;
|
const Content* content = level->content;
|
||||||
const ContentIndices* contentIds = content->indices;
|
const ContentIndices* contentIds = content->indices;
|
||||||
|
|
||||||
|
|||||||
@ -24,7 +24,6 @@ namespace gui {
|
|||||||
}
|
}
|
||||||
|
|
||||||
class HudRenderer {
|
class HudRenderer {
|
||||||
Level* level;
|
|
||||||
Assets* assets;
|
Assets* assets;
|
||||||
Camera* uicamera;
|
Camera* uicamera;
|
||||||
|
|
||||||
@ -42,9 +41,7 @@ class HudRenderer {
|
|||||||
|
|
||||||
void createDebugPanel(Engine* engine);
|
void createDebugPanel(Engine* engine);
|
||||||
public:
|
public:
|
||||||
HudRenderer(Engine* engine,
|
HudRenderer(Engine* engine, LevelFrontend* frontend);
|
||||||
Level* level,
|
|
||||||
LevelFrontend* frontend);
|
|
||||||
~HudRenderer();
|
~HudRenderer();
|
||||||
|
|
||||||
void update();
|
void update();
|
||||||
|
|||||||
@ -48,13 +48,12 @@ MenuScreen::MenuScreen(Engine* engine_) : Screen(engine_) {
|
|||||||
menu->reset();
|
menu->reset();
|
||||||
menu->set("main");
|
menu->set("main");
|
||||||
|
|
||||||
uicamera = new Camera(glm::vec3(), Window::height);
|
uicamera.reset(new Camera(glm::vec3(), Window::height));
|
||||||
uicamera->perspective = false;
|
uicamera->perspective = false;
|
||||||
uicamera->flipped = true;
|
uicamera->flipped = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
MenuScreen::~MenuScreen() {
|
MenuScreen::~MenuScreen() {
|
||||||
delete uicamera;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void MenuScreen::update(float delta) {
|
void MenuScreen::update(float delta) {
|
||||||
@ -87,8 +86,8 @@ LevelScreen::LevelScreen(Engine* engine, Level* level)
|
|||||||
: Screen(engine),
|
: Screen(engine),
|
||||||
level(level),
|
level(level),
|
||||||
frontend(std::make_unique<LevelFrontend>(level, engine->getAssets())),
|
frontend(std::make_unique<LevelFrontend>(level, engine->getAssets())),
|
||||||
hud(std::make_unique<HudRenderer>(engine, level, frontend.get())),
|
hud(std::make_unique<HudRenderer>(engine, frontend.get())),
|
||||||
worldRenderer(std::make_unique<WorldRenderer>(engine, level, frontend.get())),
|
worldRenderer(std::make_unique<WorldRenderer>(engine, frontend.get())),
|
||||||
controller(std::make_unique<LevelController>(engine->getSettings(), level)) {
|
controller(std::make_unique<LevelController>(engine->getSettings(), level)) {
|
||||||
|
|
||||||
auto& settings = engine->getSettings();
|
auto& settings = engine->getSettings();
|
||||||
|
|||||||
@ -27,7 +27,7 @@ public:
|
|||||||
};
|
};
|
||||||
|
|
||||||
class MenuScreen : public Screen {
|
class MenuScreen : public Screen {
|
||||||
Camera* uicamera;
|
std::unique_ptr<Camera> uicamera;
|
||||||
public:
|
public:
|
||||||
MenuScreen(Engine* engine);
|
MenuScreen(Engine* engine);
|
||||||
~MenuScreen();
|
~MenuScreen();
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user