From d2416946d9e3c9a8f63f9fea072fb60560ce80f5 Mon Sep 17 00:00:00 2001 From: lllzebralll Date: Sat, 19 Nov 2022 02:21:15 +0300 Subject: [PATCH] inventory --- res/block.png | Bin 12498 -> 9847 bytes src/graphics/Batch2D.cpp | 64 +++++++++++++++++- src/graphics/Batch2D.h | 11 +++- src/graphics/VoxelRenderer.cpp | 82 +++++++++--------------- src/hud_render.cpp | 114 ++++++++++++++++++++++++++------- src/voxel_engine.cpp | 4 +- src/voxels/Block.h | 4 +- src/voxels/WorldGenerator.cpp | 32 ++++----- src/world_render.cpp | 2 +- 9 files changed, 213 insertions(+), 100 deletions(-) diff --git a/res/block.png b/res/block.png index e7c090d1e41f8d05bd6bd9200a6decb577010702..723816fc351edd7cd8b0eb1723008fd7b72605e3 100644 GIT binary patch literal 9847 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 yV07ady({jR9fo#PbweVM*a`dVj}zi literal 12498 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 A!~g&Q diff --git a/src/graphics/Batch2D.cpp b/src/graphics/Batch2D.cpp index acb9f2ec..067df008 100644 --- a/src/graphics/Batch2D.cpp +++ b/src/graphics/Batch2D.cpp @@ -261,8 +261,8 @@ void Batch2D::blockSprite(float x, float y, float w, float h, int atlasRes, int } void Batch2D::rect(float x, float y, float w, float h, - float u, float v, float tx, float ty, - float r, float g, float b, float a){ + float u, float v, float tx, float ty, + float r, float g, float b, float a){ if (index + 6*VERTEX_SIZE >= capacity) render(); vertex(x, y, u, v+ty, r,g,b,a); @@ -274,6 +274,66 @@ void Batch2D::rect(float x, float y, float w, float h, vertex(x+w, y+h, u+tx, v, r,g,b,a); } +void Batch2D::rect(float x, float y, float w, float h, + float r0, float g0, float b0, + float r1, float g1, float b1, + float r2, float g2, float b2, + float r3, float g3, float b3, + float r4, float g4, float b4, int sh){ + if (index + 30*VERTEX_SIZE >= capacity) + render(); + vec2 v0 = vec2(x+h/2,y+h/2); + vec2 v1 = vec2(x+w-sh,y); + vec2 v2 = vec2(x+sh,y); + vec2 v3 = vec2(x,y+sh); + vec2 v4 = vec2(x,y+h-sh); + vec2 v5 = vec2(x+sh,y+h); + vec2 v6 = vec2(x+w-h/2,y+h/2); + vec2 v7 = vec2(x+w-sh,y+h); + vec2 v8 = vec2(x+w,y+h-sh); + vec2 v9 = vec2(x+w,y+sh); + + vertex(v0, vec2(0, 0), r1,g1,b1,1.0f); + vertex(v6, vec2(0, 0), r1,g1,b1,1.0f); + vertex(v1, vec2(0, 0), r1,g1,b1,1.0f); + + vertex(v0, vec2(0, 0), r1,g1,b1,1.0f); + vertex(v1, vec2(0, 0), r1,g1,b1,1.0f); + vertex(v2, vec2(0, 0), r1,g1,b1,1.0f); + + vertex(v0, vec2(0, 0), r0,g0,b0,1.0f); + vertex(v2, vec2(0, 0), r0,g0,b0,1.0f); + vertex(v3, vec2(0, 0), r0,g0,b0,1.0f); + + vertex(v0, vec2(0, 0), r1,g1,b1,1.0f); + vertex(v3, vec2(0, 0), r1,g1,b1,1.0f); + vertex(v4, vec2(0, 0), r1,g1,b1,1.0f); + + vertex(v0, vec2(0, 0), r2,g2,b2,1.0f); + vertex(v4, vec2(0, 0), r2,g2,b2,1.0f); + vertex(v5, vec2(0, 0), r2,g2,b2,1.0f); + + vertex(v0, vec2(0, 0), r3,g3,b3,1.0f); + vertex(v5, vec2(0, 0), r3,g3,b3,1.0f); + vertex(v6, vec2(0, 0), r3,g3,b3,1.0f); + + vertex(v6, vec2(0, 0), r3,g3,b3,1.0f); + vertex(v5, vec2(0, 0), r3,g3,b3,1.0f); + vertex(v7, vec2(0, 0), r3,g3,b3,1.0f); + + vertex(v6, vec2(0, 0), r4,g4,b4,1.0f); + vertex(v7, vec2(0, 0), r4,g4,b4,1.0f); + vertex(v8, vec2(0, 0), r4,g4,b4,1.0f); + + vertex(v6, vec2(0, 0), r3,g3,b3,1.0f); + vertex(v8, vec2(0, 0), r3,g3,b3,1.0f); + vertex(v9, vec2(0, 0), r3,g3,b3,1.0f); + + vertex(v6, vec2(0, 0), r2,g2,b2,1.0f); + vertex(v9, vec2(0, 0), r2,g2,b2,1.0f); + vertex(v1, vec2(0, 0), r2,g2,b2,1.0f); +} + void Batch2D::render() { mesh->reload(buffer, index / VERTEX_SIZE); mesh->draw(GL_TRIANGLES); diff --git a/src/graphics/Batch2D.h b/src/graphics/Batch2D.h index 0c9b69e8..ac89c884 100644 --- a/src/graphics/Batch2D.h +++ b/src/graphics/Batch2D.h @@ -49,8 +49,15 @@ public: void rect(float x, float y, float w, float h); void rect(float x, float y, float w, float h, - float u, float v, float tx, float ty, - float r, float g, float b, float a); + float u, float v, float tx, float ty, + float r, float g, float b, float a); + + void rect(float x, float y, float w, float h, + float r0, float g0, float b0, + float r1, float g1, float b1, + float r2, float g2, float b2, + float r3, float g3, float b3, + float r4, float g4, float b4, int sh); void render(); }; diff --git a/src/graphics/VoxelRenderer.cpp b/src/graphics/VoxelRenderer.cpp index fd8773ca..a7b3b953 100644 --- a/src/graphics/VoxelRenderer.cpp +++ b/src/graphics/VoxelRenderer.cpp @@ -374,86 +374,62 @@ inline void _renderXBlock(std::vector& buffer, int x, int y, int z, const float uvsize = 1.0f/16.0f; - float lr = LIGHT(x,y,z, 0) / 15.0f; - float lg = LIGHT(x,y,z, 1) / 15.0f; - float lb = LIGHT(x,y,z, 2) / 15.0f; - float ls = LIGHT(x,y,z, 3) / 15.0f; + float lr = LIGHT(x,y,z, 0); + float lg = LIGHT(x,y,z, 1); + float lb = LIGHT(x,y,z, 2); + float ls = LIGHT(x,y,z, 3); - float lr0 = (LIGHT(x,y-1,z,0) + lr*30) / 45.0f; - float lr1 = (LIGHT(x,y+1,z,0) + lr*30) / 45.0f; - float lr2 = (LIGHT(x,y+1,z,0) + lr*30) / 45.0f; - float lr3 = (LIGHT(x,y-1,z,0) + lr*30) / 45.0f; - float lr4 = (LIGHT(x,y-1,z,0) + lr*30) / 45.0f; - float lr5 = (LIGHT(x,y+1,z,0) + lr*30) / 45.0f; - float lr6 = (LIGHT(x,y+1,z,0) + lr*30) / 45.0f; - float lr7 = (LIGHT(x,y-1,z,0) + lr*30) / 45.0f; + float lr0 = (LIGHT(x,y-1,z,0) + lr*3) / 60.0f; + float lr1 = (LIGHT(x,y+1,z,0) + lr*3) / 60.0f; - float lg0 = (LIGHT(x,y-1,z,1) + lg*30) / 45.0f; - float lg1 = (LIGHT(x,y+1,z,1) + lg*30) / 45.0f; - float lg2 = (LIGHT(x,y+1,z,1) + lg*30) / 45.0f; - float lg3 = (LIGHT(x,y-1,z,1) + lg*30) / 45.0f; - float lg4 = (LIGHT(x,y-1,z,1) + lg*30) / 45.0f; - float lg5 = (LIGHT(x,y+1,z,1) + lg*30) / 45.0f; - float lg6 = (LIGHT(x,y+1,z,1) + lg*30) / 45.0f; - float lg7 = (LIGHT(x,y-1,z,1) + lg*30) / 45.0f; + float lg0 = (LIGHT(x,y-1,z,1) + lg*3) / 60.0f; + float lg1 = (LIGHT(x,y+1,z,1) + lg*3) / 60.0f; - float lb0 = (LIGHT(x,y-1,z,2) + lb*30) / 45.0f; - float lb1 = (LIGHT(x,y+1,z,2) + lb*30) / 45.0f; - float lb2 = (LIGHT(x,y+1,z,2) + lb*30) / 45.0f; - float lb3 = (LIGHT(x,y-1,z,2) + lb*30) / 45.0f; - float lb4 = (LIGHT(x,y-1,z,2) + lb*30) / 45.0f; - float lb5 = (LIGHT(x,y+1,z,2) + lb*30) / 45.0f; - float lb6 = (LIGHT(x,y+1,z,2) + lb*30) / 45.0f; - float lb7 = (LIGHT(x,y-1,z,2) + lb*30) / 45.0f; + float lb0 = (LIGHT(x,y-1,z,2) + lb*3) / 60.0f; + float lb1 = (LIGHT(x,y+1,z,2) + lb*3) / 60.0f; - float ls0 = (LIGHT(x,y-1,z,3) + ls*30) / 45.0f; - float ls1 = (LIGHT(x,y+1,z,3) + ls*30) / 45.0f; - float ls2 = (LIGHT(x,y+1,z,3) + ls*30) / 45.0f; - float ls3 = (LIGHT(x,y-1,z,3) + ls*30) / 45.0f; - float ls4 = (LIGHT(x,y-1,z,3) + ls*30) / 45.0f; - float ls5 = (LIGHT(x,y+1,z,3) + ls*30) / 45.0f; - float ls6 = (LIGHT(x,y+1,z,3) + ls*30) / 45.0f; - float ls7 = (LIGHT(x,y-1,z,3) + ls*30) / 45.0f; + float ls0 = (LIGHT(x,y-1,z,3) + ls*3) / 60.0f; + float ls1 = (LIGHT(x,y+1,z,3) + ls*3) / 60.0f; {SETUP_UV(block->textureFaces[1]); VERTEX(index, x-0.3535f+xs, y-0.5f, z-0.3535f+zs, u2,v1, lr0,lg0,lb0,ls0); VERTEX(index, x-0.3535f+xs, y+0.5f, z-0.3535f+zs, u2,v2, lr1,lg1,lb1,ls1); - VERTEX(index, x+0.3535f+xs, y+0.5f, z+0.3535f+zs, u1,v2, lr2,lg2,lb2,ls2); + VERTEX(index, x+0.3535f+xs, y+0.5f, z+0.3535f+zs, u1,v2, lr1,lg1,lb1,ls1); VERTEX(index, x-0.3535f+xs, y-0.5f, z-0.3535f+zs, u2,v1, lr0,lg0,lb0,ls0); - VERTEX(index, x+0.3535f+xs, y+0.5f, z+0.3535f+zs, u1,v2, lr2,lg2,lb2,ls2); - VERTEX(index, x+0.3535f+xs, y-0.5f, z+0.3535f+zs, u1,v1, lr3,lg3,lb3,ls3);} + VERTEX(index, x+0.3535f+xs, y+0.5f, z+0.3535f+zs, u1,v2, lr1,lg1,lb1,ls1); + VERTEX(index, x+0.3535f+xs, y-0.5f, z+0.3535f+zs, u1,v1, lr0,lg0,lb0,ls0);} {SETUP_UV(block->textureFaces[0]); VERTEX(index, x-0.3535f+xs, y-0.5f, z-0.3535f+zs, u1,v1, lr0,lg0,lb0,ls0); VERTEX(index, x+0.3535f+xs, y+0.5f, z+0.3535f+zs, u2,v2, lr1,lg1,lb1,ls1); - VERTEX(index, x-0.3535f+xs, y+0.5f, z-0.3535f+zs, u1,v2, lr2,lg2,lb2,ls2); + VERTEX(index, x-0.3535f+xs, y+0.5f, z-0.3535f+zs, u1,v2, lr1,lg1,lb1,ls1); VERTEX(index, x-0.3535f+xs, y-0.5f, z-0.3535f+zs, u1,v1, lr0,lg0,lb0,ls0); - VERTEX(index, x+0.3535f+xs, y-0.5f, z+0.3535f+zs, u2,v1, lr3,lg3,lb3,ls3); + VERTEX(index, x+0.3535f+xs, y-0.5f, z+0.3535f+zs, u2,v1, lr0,lg0,lb0,ls0); VERTEX(index, x+0.3535f+xs, y+0.5f, z+0.3535f+zs, u2,v2, lr1,lg1,lb1,ls1);} {SETUP_UV(block->textureFaces[5]); - VERTEX(index, x-0.3535f+xs, y-0.5f, z+0.3535f+zs, u1,v1, lr4,lg4,lb4,ls4); - VERTEX(index, x+0.3535f+xs, y+0.5f, z-0.3535f+zs, u2,v2, lr5,lg5,lb5,ls5); - VERTEX(index, x-0.3535f+xs, y+0.5f, z+0.3535f+zs, u1,v2, lr6,lg6,lb6,ls6); + VERTEX(index, x-0.3535f+xs, y-0.5f, z+0.3535f+zs, u1,v1, lr0,lg0,lb0,ls0); + VERTEX(index, x+0.3535f+xs, y+0.5f, z-0.3535f+zs, u2,v2, lr1,lg1,lb1,ls1); + VERTEX(index, x-0.3535f+xs, y+0.5f, z+0.3535f+zs, u1,v2, lr1,lg1,lb1,ls1); - VERTEX(index, x-0.3535f+xs, y-0.5f, z+0.3535f+zs, u1,v1, lr4,lg4,lb4,ls4); - VERTEX(index, x+0.3535f+xs, y-0.5f, z-0.3535f+zs, u2,v1, lr7,lg7,lb7,ls7); - VERTEX(index, x+0.3535f+xs, y+0.5f, z-0.3535f+zs, u2,v2, lr5,lg5,lb5,ls5);} + VERTEX(index, x-0.3535f+xs, y-0.5f, z+0.3535f+zs, u1,v1, lr0,lg0,lb0,ls0); + VERTEX(index, x+0.3535f+xs, y-0.5f, z-0.3535f+zs, u2,v1, lr0,lg0,lb0,ls0); + VERTEX(index, x+0.3535f+xs, y+0.5f, z-0.3535f+zs, u2,v2, lr1,lg1,lb1,ls1);} {SETUP_UV(block->textureFaces[4]); - VERTEX(index, x-0.3535f+xs, y-0.5f, z+0.3535f+zs, u2,v1, lr4,lg4,lb4,ls4); - VERTEX(index, x-0.3535f+xs, y+0.5f, z+0.3535f+zs, u2,v2, lr5,lg5,lb5,ls5); - VERTEX(index, x+0.3535f+xs, y+0.5f, z-0.3535f+zs, u1,v2, lr6,lg6,lb6,ls6); + VERTEX(index, x-0.3535f+xs, y-0.5f, z+0.3535f+zs, u2,v1, lr0,lg0,lb0,ls0); + VERTEX(index, x-0.3535f+xs, y+0.5f, z+0.3535f+zs, u2,v2, lr1,lg1,lb1,ls1); + VERTEX(index, x+0.3535f+xs, y+0.5f, z-0.3535f+zs, u1,v2, lr1,lg1,lb1,ls1); - VERTEX(index, x-0.3535f+xs, y-0.5f, z+0.3535f+zs, u2,v1, lr4,lg4,lb4,ls4); - VERTEX(index, x+0.3535f+xs, y+0.5f, z-0.3535f+zs, u1,v2, lr6,lg6,lb6,ls6); - VERTEX(index, x+0.3535f+xs, y-0.5f, z-0.3535f+zs, u1,v1, lr7,lg7,lb7,ls7);} + VERTEX(index, x-0.3535f+xs, y-0.5f, z+0.3535f+zs, u2,v1, lr0,lg0,lb0,ls0); + VERTEX(index, x+0.3535f+xs, y+0.5f, z-0.3535f+zs, u1,v2, lr1,lg1,lb1,ls1); + VERTEX(index, x+0.3535f+xs, y-0.5f, z-0.3535f+zs, u1,v1, lr0,lg0,lb0,ls0);} } const float* VoxelRenderer::render(Chunk* chunk, const Chunk** chunks, size_t& size){ diff --git a/src/hud_render.cpp b/src/hud_render.cpp index 1cadf969..bead34d9 100644 --- a/src/hud_render.cpp +++ b/src/hud_render.cpp @@ -56,8 +56,8 @@ void HudRenderer::drawDebug(Level* level, Assets* assets, int fps, bool occlusio batch->begin(); font->draw(batch, L"chunks: "+std::to_wstring(chunks->chunksCount), 16, 16, STYLE_OUTLINE); font->draw(batch, std::to_wstring((int)player->camera->position.x), 10, 30, STYLE_OUTLINE); - font->draw(batch, std::to_wstring((int)player->camera->position.y), 50, 30, STYLE_OUTLINE); - font->draw(batch, std::to_wstring((int)player->camera->position.z), 90, 30, STYLE_OUTLINE); + font->draw(batch, std::to_wstring((int)player->camera->position.y), 90, 30, STYLE_OUTLINE); + font->draw(batch, std::to_wstring((int)player->camera->position.z), 170, 30, STYLE_OUTLINE); font->draw(batch, L"fps:", 16, 42, STYLE_OUTLINE); font->draw(batch, std::to_wstring(fps), 44, 42, STYLE_OUTLINE); font->draw(batch, L"occlusion: "+std::to_wstring(occlusion), 16, 54, STYLE_OUTLINE); @@ -80,51 +80,115 @@ void HudRenderer::draw(Level* level, Assets* assets){ Texture* sprite = assets->getTexture("slot"); if (!Events::_cursor_locked) { - batch->texture(nullptr); - batch->color = vec4(0.0f, 0.0f, 0.0f, 0.5f); - batch->rect(0, 0, Window::width, Window::height); } batch->color = vec4(1.0f); - batch->texture(sprite); - batch->sprite(16, uicamera->fov - 80, 64, 64, 16, 0, vec4(1.0f)); + // batch->texture(sprite); + batch->texture(nullptr); + // batch->sprite(Window::width/2-32, uicamera->fov - 80, 64, 64, 16, 0, vec4(1.0f)); + // batch->rect(Window::width/2-128-4, Window::height-80-4, 256+8, 64+8, + // 0.85f, 0.85f, 0.85f, 0.95f, 0.95f, 0.95f, + // 0.55f, 0.55f, 0.55f, + // 0.45f, 0.45f, 0.45f, 0.7f, 0.7f, 0.7f, 2); + batch->rect(Window::width/2-128-4, Window::height-80-4, 256+8, 64+8, + 0.95f, 0.95f, 0.95f, 0.85f, 0.85f, 0.85f, + 0.7f, 0.7f, 0.7f, + 0.55f, 0.55f, 0.55f, 0.45f, 0.45f, 0.45f, 4); + batch->rect(Window::width/2-128, Window::height - 80, 256, 64, + 0.75f, 0.75f, 0.75f, 0.75f, 0.75f, 0.75f, + 0.75f, 0.75f, 0.75f, + 0.75f, 0.75f, 0.75f, 0.75f, 0.75f, 0.75f, 4); + batch->rect(Window::width/2-32+2, Window::height - 80+2, 60, 60, + 0.45f, 0.45f, 0.45f, 0.55f, 0.55f, 0.55f, + 0.7f, 0.7f, 0.7f, + 0.85f, 0.85f, 0.85f, 0.95f, 0.95f, 0.95f, 2); + batch->rect(Window::width/2-32+4, Window::height - 80+4, 56, 56, + 0.75f, 0.75f, 0.75f, 0.75f, 0.75f, 0.75f, + 0.75f, 0.75f, 0.75f, + 0.75f, 0.75f, 0.75f, 0.75f, 0.75f, 0.75f, 2); + batch->texture(blocks); Player* player = level->player; { Block* cblock = Block::blocks[player->choosenBlock]; if (cblock->model == BLOCK_MODEL_CUBE){ - batch->blockSprite(24, uicamera->fov - 72, 48, 48, 16, cblock->textureFaces, vec4(1.0f)); + batch->blockSprite(Window::width/2-24, uicamera->fov - 72, 48, 48, 16, cblock->textureFaces, vec4(1.0f)); } else if (cblock->model == BLOCK_MODEL_X_SPRITE){ - batch->sprite(24, uicamera->fov - 72, 48, 48, 16, cblock->textureFaces[3], vec4(1.0f)); + batch->sprite(Window::width/2-24, uicamera->fov - 72, 48, 48, 16, cblock->textureFaces[3], vec4(1.0f)); } } - if (!Events::_cursor_locked) { + if (!Events::_cursor_locked) { //inventory int size = 48; - int step = 70; - int y = uicamera->fov - 72 - 70; + int step = 64; + int inv_wm = step*10; + int inv_hm = step*8; + int inv_w = inv_wm - (step - size); + int inv_h = inv_hm - (step - size); + int xs = (Window::width - inv_w + step)/2; int x = 0; + int ys = (Window::height - inv_h + step)/2; + int y = 0; vec4 tint = vec4(1.0f); int mx = Events::x; int my = Events::y; + int count = (inv_w / step) * (inv_h / step) + 1; - for (unsigned i = 1; i < 256; i++) { + //back + batch->texture(nullptr); + batch->color = vec4(0.0f, 0.0f, 0.0f, 0.3f); + batch->rect(0, 0, Window::width, Window::height); + batch->rect((Window::width - (inv_w)) / 2 - 4, (Window::height - (inv_h)) / 2 - 4, inv_w+8, inv_h+8, + 0.95f, 0.95f, 0.95f, 0.85f, 0.85f, 0.85f, + 0.7f, 0.7f, 0.7f, + 0.55f, 0.55f, 0.55f, 0.45f, 0.45f, 0.45f, 4); + batch->rect((Window::width - (inv_w)) / 2, (Window::height - (inv_h)) / 2, inv_w, inv_h, + 0.75f, 0.75f, 0.75f, 0.75f, 0.75f, 0.75f, + 0.75f, 0.75f, 0.75f, + 0.75f, 0.75f, 0.75f, 0.75f, 0.75f, 0.75f, 4); + + batch->color = vec4(0.35f, 0.35f, 0.35f, 1.0f); + for (unsigned i = 1; i < count; i++) { + x = xs + step * ((i-1) % (inv_w / step)); + y = ys + step * ((i-1) / (inv_w / step)); + // batch->rect(x-2, y-2, size+4, size+4); + batch->rect(x-2, y-2, size+4, size+4, + 0.45f, 0.45f, 0.45f, 0.55f, 0.55f, 0.55f, + 0.7f, 0.7f, 0.7f, + 0.85f, 0.85f, 0.85f, 0.95f, 0.95f, 0.95f, 2); + batch->rect(x, y, size, size, + 0.65f, 0.65f, 0.65f, 0.65f, 0.65f, 0.65f, + 0.65f, 0.65f, 0.65f, + 0.65f, 0.65f, 0.65f, 0.65f, 0.65f, 0.65f, 2); + } + + // batch->color = vec4(0.5f, 0.5f, 0.5f, 1.0f); + // for (unsigned i = 1; i < count; i++) { + // x = xs + step * ((i-1) % (inv_w / step)); + // y = ys + step * ((i-1) / (inv_w / step)); + // batch->rect(x, y, size, size); + // } + + //front + batch->texture(blocks); + for (unsigned i = 1; i < count; i++) { Block* cblock = Block::blocks[i]; if (cblock == nullptr) break; - x = 24 + (i-1) * step; - y -= 72 * (x / (Window::width - step)); - x %= (Window::width - step); + x = xs + step * ((i-1) % (inv_w / step)); + y = ys + step * ((i-1) / (inv_w / step)); if (mx > x && mx < x + size && my > y && my < y + size) { - tint.r *= 1.3f; - tint.g *= 1.3f; - tint.b *= 1.3f; + tint.r *= 1.2f; + tint.g *= 1.2f; + tint.b *= 1.2f; if (Events::jclicked(GLFW_MOUSE_BUTTON_LEFT)) { player->choosenBlock = i; } + // size = 50; } else { + // size = 48; tint = vec4(1.0f); } @@ -138,9 +202,11 @@ void HudRenderer::draw(Level* level, Assets* assets){ batch->render(); - Shader* crosshairShader = assets->getShader("crosshair"); - crosshairShader->use(); - crosshairShader->uniform1f("u_ar", (float)Window::height / (float)Window::width); - crosshairShader->uniform1f("u_scale", 1.0f / ((float)Window::height / 1000.0f)); - crosshair->draw(GL_LINES); + if (Events::_cursor_locked){ + Shader* crosshairShader = assets->getShader("crosshair"); + crosshairShader->use(); + crosshairShader->uniform1f("u_ar", (float)Window::height / (float)Window::width); + crosshairShader->uniform1f("u_scale", 1.0f / ((float)Window::height / 1000.0f)); + crosshair->draw(GL_LINES); + } } diff --git a/src/voxel_engine.cpp b/src/voxel_engine.cpp index 30f4dba1..7f232955 100644 --- a/src/voxel_engine.cpp +++ b/src/voxel_engine.cpp @@ -130,7 +130,7 @@ void mainloop(Level* level, Assets* assets) { if (Events::jpressed(GLFW_KEY_ESCAPE)){ Window::setShouldClose(true); } - if (Events::jpressed(GLFW_KEY_TAB)){ + if (Events::jpressed(GLFW_KEY_TAB) || Events::jpressed(GLFW_KEY_E)){ Events::toggleCursor(); } if (Events::jpressed(GLFW_KEY_O)){ @@ -178,7 +178,7 @@ int main() { if (status) return status; std::cout << "-- loading world" << std::endl; - vec3 playerPosition = vec3(0,150,-10); + vec3 playerPosition = vec3(0,150,0); Camera* camera = new Camera(playerPosition, radians(90.0f)); World* world = new World("world-1", "world/", 42); Player* player = new Player(playerPosition, 4.0f, camera); diff --git a/src/voxels/Block.h b/src/voxels/Block.h index 21f6fde3..561c741b 100644 --- a/src/voxels/Block.h +++ b/src/voxels/Block.h @@ -13,12 +13,14 @@ public: int textureFaces[6]; // -x,x, -y,y, -z,z unsigned char emission[3]; unsigned char drawGroup = 0; + unsigned char model = 1; // 0:None 1:Block 2:XSprite bool lightPassing = false; bool skyLightPassing = false; bool obstacle = true; bool selectable = true; bool breakable = true; - unsigned char model = 1; + float hitboxScale = 1; + float hitboxY = 1; Block(unsigned int id, int texture); }; diff --git a/src/voxels/WorldGenerator.cpp b/src/voxels/WorldGenerator.cpp index 252d2607..eaf155f7 100644 --- a/src/voxels/WorldGenerator.cpp +++ b/src/voxels/WorldGenerator.cpp @@ -37,15 +37,16 @@ public: }; float calc_height(fnl_state *noise, int real_x, int real_z){ - float height = fnlGetNoise3D(noise, real_x*0.0125f*8,real_z*0.0125f*8, 0.0f); - height += fnlGetNoise3D(noise, real_x*0.025f*8,real_z*0.025f*8, 0.0f)*0.5f; - height += fnlGetNoise3D(noise, real_x*0.05f*8,real_z*0.05f*8, 0.0f)*0.25f; + float height = 0; + height += fnlGetNoise3D(noise, real_x*0.0125f*8-125567,real_z*0.0125f*8+3546, 0.0f); + height += fnlGetNoise3D(noise, real_x*0.025f*8+4647,real_z*0.025f*8-3436, 0.0f)*0.5f; + height += fnlGetNoise3D(noise, real_x*0.05f*8-834176,real_z*0.05f*8+23678, 0.0f)*0.25f; height += fnlGetNoise3D(noise, - real_x*0.2f*8 + fnlGetNoise3D(noise, real_x*0.1f*8,real_z*0.1f*8, 0.0f)*50, - real_z*0.2f*8 + fnlGetNoise3D(noise, real_x*0.1f*8+4363,real_z*0.1f*8, 0.0f)*50, + real_x*0.2f*8 + fnlGetNoise3D(noise, real_x*0.1f*8-23557,real_z*0.1f*8-6568, 0.0f)*50, + real_z*0.2f*8 + fnlGetNoise3D(noise, real_x*0.1f*8+4363,real_z*0.1f*8+4456, 0.0f)*50, 0.0f)*0.1f; - height += fnlGetNoise3D(noise, real_x*0.1f*8,real_z*0.1f*8, 0.0f)*0.125f; - height += fnlGetNoise3D(noise, real_x*0.4f*8,real_z*0.4f*8, 0.0f)*0.0625f; + height += fnlGetNoise3D(noise, real_x*0.1f*8-3465,real_z*0.1f*8+4534, 0.0f)*0.125f; + height += fnlGetNoise3D(noise, real_x*0.4f*8+4565,real_z*0.4f*8+46456, 0.0f)*0.0625f; height += fnlGetNoise3D(noise, real_x*8,real_z*8, 0.0f)*0.03f*(fnlGetNoise3D(noise, -real_x*0.0125f*8-1000,real_z*0.0125f*8+2000, 0.0f)/2+0.5f); height *= fnlGetNoise3D(noise, real_x*0.0125f*8+1000,real_z*0.0125f*8+1000, 0.0f)/2+0.5f; height += 1.0f; @@ -54,14 +55,15 @@ float calc_height(fnl_state *noise, int real_x, int real_z){ } float calc_height_faster(fnl_state *noise, int real_x, int real_z){ - float height = fnlGetNoise3D(noise, real_x*0.0125f*8,real_z*0.0125f*8, 0.0f); - height += fnlGetNoise3D(noise, real_x*0.025f*8,real_z*0.025f*8, 0.0f)*0.5f; - height += fnlGetNoise3D(noise, real_x*0.05f*8,real_z*0.05f*8, 0.0f)*0.25f; + float height = 0; + height += fnlGetNoise3D(noise, real_x*0.0125f*8-125567,real_z*0.0125f*8+3546, 0.0f); + height += fnlGetNoise3D(noise, real_x*0.025f*8+4647,real_z*0.025f*8-3436, 0.0f)*0.5f; + height += fnlGetNoise3D(noise, real_x*0.05f*8-834176,real_z*0.05f*8+23678, 0.0f)*0.25f; height += fnlGetNoise3D(noise, - real_x*0.2f*8 + fnlGetNoise3D(noise, real_x*0.1f*8,real_z*0.1f*8, 0.0f)*50, - real_z*0.2f*8 + fnlGetNoise3D(noise, real_x*0.1f*8+4363,real_z*0.1f*8, 0.0f)*50, + real_x*0.2f*8 + fnlGetNoise3D(noise, real_x*0.1f*8-23557,real_z*0.1f*8-6568, 0.0f)*50, + real_z*0.2f*8 + fnlGetNoise3D(noise, real_x*0.1f*8+4363,real_z*0.1f*8+4456, 0.0f)*50, 0.0f)*0.1f; - height += fnlGetNoise3D(noise, real_x*0.1f*8,real_z*0.1f*8, 0.0f)*0.125f; + height += fnlGetNoise3D(noise, real_x*0.1f*8-3465,real_z*0.1f*8+4534, 0.0f)*0.125f; height *= fnlGetNoise3D(noise, real_x*0.0125f*8+1000,real_z*0.0125f*8+1000, 0.0f)/2+0.5f; height += 1.0f; height *= 64.0f; @@ -142,10 +144,10 @@ void WorldGenerator::generate(voxel* voxels, int cx, int cz, int seed){ } if (real_y <= 2) id = BLOCK_BEDROCK; - if ((id == 0) && (real_y > 55) && ((int)(height + 0.5f) == real_y) && ((unsigned short)random() > 56000)){ + if ((id == 0) && (height > 55.5) && ((int)(height + 1) == real_y) && ((unsigned short)random() > 56000)){ id = BLOCK_GRASS; } - if ((id == 0) && (real_y > 55) && ((int)(height + 0.5f) == real_y) && ((unsigned short)random() > 64000)){ + if ((id == 0) && (height > 55.5) && ((int)(height + 1) == real_y) && ((unsigned short)random() > 64000)){ id = BLOCK_FLOWER; } voxels[(y * CHUNK_D + z) * CHUNK_W + x].id = id; diff --git a/src/world_render.cpp b/src/world_render.cpp index 48209214..8d85a3fa 100644 --- a/src/world_render.cpp +++ b/src/world_render.cpp @@ -147,7 +147,7 @@ void WorldRenderer::draw(World* world, Camera* camera, bool occlusion){ if (selectedBlock->model == 1){ lineBatch->box(pos.x+0.5f, pos.y+0.5f, pos.z+0.5f, 1.005f,1.005f,1.005f, 0,0,0,0.5f); } else if (selectedBlock->model == 2){ - lineBatch->box(pos.x+0.4f, pos.y+0.3f, pos.z+0.4f, 0.805f,0.805f,0.805f, 0,0,0,0.5f); + lineBatch->box(pos.x+0.5f, pos.y+0.35f, pos.z+0.5f, 0.805f,0.705f,0.805f, 0,0,0,0.5f); } } }