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::shared_ptr;
|
||||
|
||||
WorldRenderer::WorldRenderer(Engine* engine,
|
||||
Level* level,
|
||||
LevelFrontend* frontend)
|
||||
WorldRenderer::WorldRenderer(Engine* engine, LevelFrontend* frontend)
|
||||
: engine(engine),
|
||||
level(level),
|
||||
level(frontend->getLevel()),
|
||||
frustumCulling(new Frustum()),
|
||||
lineBatch(new LineBatch()),
|
||||
renderer(new ChunksRenderer(level,
|
||||
|
||||
@ -34,7 +34,7 @@ class WorldRenderer {
|
||||
bool drawChunk(size_t index, Camera* camera, Shader* shader, bool culling);
|
||||
void drawChunks(Chunks* chunks, Camera* camera, Shader* shader);
|
||||
public:
|
||||
WorldRenderer(Engine* engine, Level* level, LevelFrontend* frontend);
|
||||
WorldRenderer(Engine* engine, LevelFrontend* frontend);
|
||||
~WorldRenderer();
|
||||
|
||||
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) {
|
||||
auto level = frontend->getLevel();
|
||||
|
||||
Panel* panel = new Panel(vec2(250, 200), vec4(5.0f), 1.0f);
|
||||
debugPanel = std::shared_ptr<UINode>(panel);
|
||||
panel->listenInterval(1.0f, [this]() {
|
||||
@ -72,11 +74,11 @@ void HudRenderer::createDebugPanel(Engine* engine) {
|
||||
bool culling = settings.graphics.frustumCulling;
|
||||
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)+
|
||||
L" visible: "+std::to_wstring(level->chunks->visible);
|
||||
}));
|
||||
panel->add(create_label([this](){
|
||||
panel->add(create_label([=](){
|
||||
auto player = level->player;
|
||||
auto indices = level->content->indices;
|
||||
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)+
|
||||
L" "+stream.str();
|
||||
}));
|
||||
panel->add(create_label([this](){
|
||||
panel->add(create_label([=](){
|
||||
return L"seed: "+std::to_wstring(level->world->seed);
|
||||
}));
|
||||
|
||||
@ -105,15 +107,15 @@ void HudRenderer::createDebugPanel(Engine* engine) {
|
||||
|
||||
// Coord input
|
||||
TextBox* box = new TextBox(L"");
|
||||
box->textSupplier([this, ax]() {
|
||||
Hitbox* hitbox = this->level->player->hitbox;
|
||||
box->textSupplier([=]() {
|
||||
Hitbox* hitbox = level->player->hitbox;
|
||||
return std::to_wstring(hitbox->position[ax]);
|
||||
});
|
||||
box->textConsumer([this, ax](std::wstring text) {
|
||||
box->textConsumer([=](std::wstring text) {
|
||||
try {
|
||||
vec3 position = this->level->player->hitbox->position;
|
||||
vec3 position = level->player->hitbox->position;
|
||||
position[ax] = std::stoi(text);
|
||||
this->level->player->teleport(position);
|
||||
level->player->teleport(position);
|
||||
} catch (std::invalid_argument& _){
|
||||
}
|
||||
});
|
||||
@ -121,9 +123,9 @@ void HudRenderer::createDebugPanel(Engine* engine) {
|
||||
sub->add(box);
|
||||
panel->add(sub);
|
||||
}
|
||||
panel->add(create_label([this](){
|
||||
panel->add(create_label([=](){
|
||||
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 =
|
||||
util::lfill(std::to_wstring(hour), 2, L'0') + L":" +
|
||||
@ -171,14 +173,12 @@ void HudRenderer::createDebugPanel(Engine* engine) {
|
||||
panel->refresh();
|
||||
}
|
||||
|
||||
HudRenderer::HudRenderer(Engine* engine,
|
||||
Level* level,
|
||||
LevelFrontend* frontend)
|
||||
: level(level),
|
||||
assets(engine->getAssets()),
|
||||
HudRenderer::HudRenderer(Engine* engine, LevelFrontend* frontend)
|
||||
: assets(engine->getAssets()),
|
||||
gui(engine->getGUI()),
|
||||
frontend(frontend) {
|
||||
|
||||
auto level = frontend->getLevel();
|
||||
auto menu = gui->getMenu();
|
||||
auto content = level->content;
|
||||
auto indices = content->indices;
|
||||
@ -242,6 +242,7 @@ void HudRenderer::update() {
|
||||
}
|
||||
|
||||
void HudRenderer::draw(const GfxContext& ctx){
|
||||
auto level = frontend->getLevel();
|
||||
const Content* content = level->content;
|
||||
const ContentIndices* contentIds = content->indices;
|
||||
|
||||
|
||||
@ -24,7 +24,6 @@ namespace gui {
|
||||
}
|
||||
|
||||
class HudRenderer {
|
||||
Level* level;
|
||||
Assets* assets;
|
||||
Camera* uicamera;
|
||||
|
||||
@ -42,9 +41,7 @@ class HudRenderer {
|
||||
|
||||
void createDebugPanel(Engine* engine);
|
||||
public:
|
||||
HudRenderer(Engine* engine,
|
||||
Level* level,
|
||||
LevelFrontend* frontend);
|
||||
HudRenderer(Engine* engine, LevelFrontend* frontend);
|
||||
~HudRenderer();
|
||||
|
||||
void update();
|
||||
|
||||
@ -48,13 +48,12 @@ MenuScreen::MenuScreen(Engine* engine_) : Screen(engine_) {
|
||||
menu->reset();
|
||||
menu->set("main");
|
||||
|
||||
uicamera = new Camera(glm::vec3(), Window::height);
|
||||
uicamera.reset(new Camera(glm::vec3(), Window::height));
|
||||
uicamera->perspective = false;
|
||||
uicamera->flipped = true;
|
||||
}
|
||||
|
||||
MenuScreen::~MenuScreen() {
|
||||
delete uicamera;
|
||||
}
|
||||
|
||||
void MenuScreen::update(float delta) {
|
||||
@ -87,8 +86,8 @@ LevelScreen::LevelScreen(Engine* engine, Level* level)
|
||||
: Screen(engine),
|
||||
level(level),
|
||||
frontend(std::make_unique<LevelFrontend>(level, engine->getAssets())),
|
||||
hud(std::make_unique<HudRenderer>(engine, level, frontend.get())),
|
||||
worldRenderer(std::make_unique<WorldRenderer>(engine, level, frontend.get())),
|
||||
hud(std::make_unique<HudRenderer>(engine, frontend.get())),
|
||||
worldRenderer(std::make_unique<WorldRenderer>(engine, frontend.get())),
|
||||
controller(std::make_unique<LevelController>(engine->getSettings(), level)) {
|
||||
|
||||
auto& settings = engine->getSettings();
|
||||
|
||||
@ -27,7 +27,7 @@ public:
|
||||
};
|
||||
|
||||
class MenuScreen : public Screen {
|
||||
Camera* uicamera;
|
||||
std::unique_ptr<Camera> uicamera;
|
||||
public:
|
||||
MenuScreen(Engine* engine);
|
||||
~MenuScreen();
|
||||
|
||||
@ -67,7 +67,7 @@ enum class BlockModel {
|
||||
class Block {
|
||||
public:
|
||||
std::string const name;
|
||||
// 0 1 2 3 4 5
|
||||
// 0 1 2 3 4 5
|
||||
std::string textureFaces[6]; // -x,x, -y,y, -z,z
|
||||
unsigned char emission[4] {0, 0, 0, 0};
|
||||
unsigned char drawGroup = 0;
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user