Refactor
This commit is contained in:
@@ -49,6 +49,10 @@ void InventoryView::setSlotConsumer(slotconsumer consumer) {
|
||||
this->consumer = consumer;
|
||||
}
|
||||
|
||||
void InventoryView::setItems(std::vector<itemid_t> items) {
|
||||
this->items = items;
|
||||
}
|
||||
|
||||
void InventoryView::actAndDraw(const GfxContext* ctx) {
|
||||
Assets* assets = frontend->getAssets();
|
||||
Shader* uiShader = assets->getShader("ui");
|
||||
|
||||
@@ -39,6 +39,8 @@ public:
|
||||
|
||||
virtual void actAndDraw(const GfxContext* ctx);
|
||||
|
||||
void setItems(std::vector<itemid_t> items);
|
||||
|
||||
void setPosition(int x, int y);
|
||||
int getWidth() const;
|
||||
int getHeight() const;
|
||||
|
||||
@@ -168,7 +168,7 @@ void WorldRenderer::draw(const GfxContext& pctx, Camera* camera){
|
||||
shader->uniform3f("u_cameraPos", camera->position);
|
||||
shader->uniform1i("u_cubemap", 1);
|
||||
{
|
||||
blockid_t id = level->player->chosenItem;
|
||||
blockid_t id = level->player->getChosenItem();
|
||||
Block* block = contentIds->getBlockDef(id);
|
||||
assert(block != nullptr);
|
||||
float multiplier = 0.5f;
|
||||
|
||||
+9
-40
@@ -109,7 +109,7 @@ void HudRenderer::createDebugPanel(Engine* engine) {
|
||||
// Coord input
|
||||
TextBox* box = new TextBox(L"");
|
||||
box->textSupplier([=]() {
|
||||
Hitbox* hitbox = level->player->hitbox;
|
||||
Hitbox* hitbox = level->player->hitbox.get();
|
||||
return std::to_wstring(hitbox->position[ax]);
|
||||
});
|
||||
box->textConsumer([=](std::wstring text) {
|
||||
@@ -183,15 +183,18 @@ HudRenderer::HudRenderer(Engine* engine, LevelFrontend* frontend)
|
||||
auto menu = gui->getMenu();
|
||||
auto content = level->content;
|
||||
auto indices = content->indices;
|
||||
|
||||
std::vector<itemid_t> items;
|
||||
for (itemid_t id = 1; id < indices->countItemDefs(); id++) {
|
||||
items.push_back(id);
|
||||
}
|
||||
contentAccess.reset(new InventoryView(8, content, frontend, items));
|
||||
contentAccess->setSlotConsumer([=](blockid_t id) {
|
||||
level->player->chosenItem = id;
|
||||
level->player->setChosenItem(id);
|
||||
});
|
||||
|
||||
hotbarView.reset(new InventoryView(1, content, frontend, std::vector<itemid_t> {0}));
|
||||
|
||||
uicamera = new Camera(vec3(), 1);
|
||||
uicamera->perspective = false;
|
||||
uicamera->flipped = true;
|
||||
@@ -270,50 +273,16 @@ void HudRenderer::draw(const GfxContext& ctx){
|
||||
}
|
||||
|
||||
Player* player = level->player;
|
||||
batch->color = vec4(0.0f, 0.0f, 0.0f, 0.75f);
|
||||
batch->rect(width - 68, height - 68, 68, 68);
|
||||
batch->color = vec4(1.0f);
|
||||
batch->render();
|
||||
|
||||
|
||||
{
|
||||
Window::clearDepth();
|
||||
GfxContext subctx = ctx.sub();
|
||||
subctx.depthTest(true);
|
||||
subctx.cullFace(true);
|
||||
|
||||
ItemDef* item = contentIds->getItemDef(player->chosenItem);
|
||||
switch (item->iconType) {
|
||||
case item_icon_type::none:
|
||||
break;
|
||||
case item_icon_type::block: {
|
||||
Block* cblock = content->findBlock(item->icon);
|
||||
assert(cblock != nullptr);
|
||||
|
||||
auto blocksPreview = frontend->getBlocksPreview();
|
||||
blocksPreview->begin(&ctx.getViewport());
|
||||
blocksPreview->draw(cblock, width - 56, uicamera->getFov() - 56, 48, vec4(1.0f));
|
||||
break;
|
||||
}
|
||||
case item_icon_type::sprite: {
|
||||
size_t index = item->icon.find(':');
|
||||
std::string name = item->icon.substr(index+1);
|
||||
UVRegion region(0.0f, 0.0, 1.0f, 1.0f);
|
||||
if (index == std::string::npos) {
|
||||
batch->texture(assets->getTexture(name));
|
||||
} else {
|
||||
std::string atlasname = item->icon.substr(0, index);
|
||||
Atlas* atlas = assets->getAtlas(atlasname);
|
||||
if (atlas && atlas->has(name)) {
|
||||
region = atlas->get(name);
|
||||
batch->texture(atlas->getTexture());
|
||||
}
|
||||
}
|
||||
batch->rect(width - 56, uicamera->getFov() - 56, 48, 48, 0, 0, 0,
|
||||
region, false, true, glm::vec4(1.0f));
|
||||
batch->render();
|
||||
}
|
||||
}
|
||||
|
||||
hotbarView->setPosition(width-56, height-56);
|
||||
hotbarView->setItems({player->getChosenItem()});
|
||||
hotbarView->actAndDraw(&subctx);
|
||||
}
|
||||
uishader->use();
|
||||
batch->begin();
|
||||
|
||||
@@ -35,6 +35,7 @@ class HudRenderer {
|
||||
bool pause = false;
|
||||
|
||||
std::unique_ptr<InventoryView> contentAccess;
|
||||
std::unique_ptr<InventoryView> hotbarView;
|
||||
std::shared_ptr<gui::UINode> debugPanel;
|
||||
gui::GUI* gui;
|
||||
LevelFrontend* frontend;
|
||||
|
||||
@@ -144,12 +144,12 @@ void LevelScreen::update(float delta) {
|
||||
}
|
||||
|
||||
void LevelScreen::draw(float delta) {
|
||||
Camera* camera = level->player->currentViewCamera;
|
||||
auto camera = level->player->currentCamera;
|
||||
|
||||
Viewport viewport(Window::width, Window::height);
|
||||
GfxContext ctx(nullptr, viewport, batch.get());
|
||||
|
||||
worldRenderer->draw(ctx, camera);
|
||||
worldRenderer->draw(ctx, camera.get());
|
||||
|
||||
if (hudVisible) {
|
||||
hud->draw(ctx);
|
||||
|
||||
Reference in New Issue
Block a user