X-Git-Url: http://git.localhorst.tv/?a=blobdiff_plain;f=src%2Fworld%2FWorld.cpp;h=5827e8f872f2112e6c057d5c98958ab6d4bbd5bf;hb=ede25c0a2f59e21521d1cd962e6ea9d78169ca12;hp=e8b665c992366ca2b5f2ecc0efd63447a2f8d73d;hpb=549646ac3e5bede5e77031f773649edf8de83608;p=blank.git diff --git a/src/world/World.cpp b/src/world/World.cpp index e8b665c..5827e8f 100644 --- a/src/world/World.cpp +++ b/src/world/World.cpp @@ -1,9 +1,10 @@ #include "World.hpp" #include "WorldCollision.hpp" +#include "../app/Assets.hpp" +#include "../graphics/Format.hpp" #include "../graphics/Viewport.hpp" -#include #include #include #include @@ -11,143 +12,24 @@ namespace blank { -World::World(const Config &config) -: blockType() -, blockShape({{ -0.5f, -0.5f, -0.5f }, { 0.5f, 0.5f, 0.5f }}) -, stairShape({{ -0.5f, -0.5f, -0.5f }, { 0.5f, 0.5f, 0.5f }}, { 0.0f, 0.0f }) -, slabShape({{ -0.5f, -0.5f, -0.5f }, { 0.5f, 0.0f, 0.5f }}) +World::World(const Assets &assets, const Config &config, const WorldSave &save) +: block_type() +, block_tex() , generate(config.gen) -, chunks(config.load, blockType, generate) +, chunks(config.load, block_type, generate, save) , player() , entities() , light_direction(config.light_direction) , fog_density(config.fog_density) { - BlockType::Faces block_fill = { true, true, true, true, true, true }; - BlockType::Faces slab_fill = { false, true, false, false, false, false }; - BlockType::Faces stair_fill = { false, true, false, false, false, true }; - - { // white block - BlockType type(true, { 1.0f, 1.0f, 1.0f }, &blockShape); - type.label = "White Block"; - type.block_light = true; - type.collision = true; - type.collide_block = true; - type.fill = block_fill; - blockType.Add(type); - } - { // white slab - BlockType type(true, { 1.0f, 1.0f, 1.0f }, &slabShape); - type.label = "White Slab"; - type.block_light = true; - type.collision = true; - type.collide_block = true; - type.fill = slab_fill; - blockType.Add(type); - } - { // white stair - BlockType type(true, { 1.0f, 1.0f, 1.0f }, &stairShape); - type.label = "White Stair"; - type.block_light = true; - type.collision = true; - type.collide_block = true; - type.fill = stair_fill; - blockType.Add(type); - } + block_tex.Bind(); + block_tex.Reserve(16, 16, 4, Format()); + assets.LoadTexture("debug", block_tex, 0); + assets.LoadTexture("rock-1", block_tex, 1); + assets.LoadTexture("rock-2", block_tex, 2); + assets.LoadTexture("rock-3", block_tex, 3); + block_tex.FilterNearest(); - { // red block - BlockType type(true, { 1.0f, 0.0f, 0.0f }, &blockShape); - type.label = "Red Block"; - type.block_light = true; - type.collision = true; - type.collide_block = true; - type.fill = block_fill; - blockType.Add(type); - } - { // red slab - BlockType type(true, { 1.0f, 0.0f, 0.0f }, &slabShape); - type.label = "Red Slab"; - type.block_light = true; - type.collision = true; - type.collide_block = true; - type.fill = slab_fill; - blockType.Add(type); - } - { // red stair - BlockType type(true, { 1.0f, 0.0f, 0.0f }, &stairShape); - type.label = "Red Stair"; - type.block_light = true; - type.collision = true; - type.collide_block = true; - type.fill = stair_fill; - blockType.Add(type); - } - - { // green block - BlockType type(true, { 0.0f, 1.0f, 0.0f }, &blockShape); - type.label = "Green Block"; - type.block_light = true; - type.collision = true; - type.collide_block = true; - type.fill = block_fill; - blockType.Add(type); - } - { // green slab - BlockType type(true, { 0.0f, 1.0f, 0.0f }, &slabShape); - type.label = "Green Slab"; - type.block_light = true; - type.collision = true; - type.collide_block = true; - type.fill = slab_fill; - blockType.Add(type); - } - { // green stair - BlockType type(true, { 0.0f, 1.0f, 0.0f }, &stairShape); - type.label = "Green Stair"; - type.block_light = true; - type.collision = true; - type.collide_block = true; - type.fill = stair_fill; - blockType.Add(type); - } - - { // blue block - BlockType type(true, { 0.0f, 0.0f, 1.0f }, &blockShape); - type.label = "Blue Block"; - type.block_light = true; - type.collision = true; - type.collide_block = true; - type.fill = block_fill; - blockType.Add(type); - } - { // blue slab - BlockType type(true, { 0.0f, 0.0f, 1.0f }, &slabShape); - type.label = "Blue Slab"; - type.block_light = true; - type.collision = true; - type.collide_block = true; - type.fill = slab_fill; - blockType.Add(type); - } - { // blue stair - BlockType type(true, { 0.0f, 0.0f, 1.0f }, &stairShape); - type.label = "Blue Stair"; - type.block_light = true; - type.collision = true; - type.collide_block = true; - type.fill = stair_fill; - blockType.Add(type); - } - - { // glowing yellow block - BlockType type(true, { 1.0f, 1.0f, 0.0f }, &blockShape); - type.label = "Light"; - type.luminosity = 15; - type.block_light = true; - type.collision = true; - type.collide_block = true; - type.fill = block_fill; - blockType.Add(type); - } + assets.LoadBlockTypes("default", block_type); generate.Space(0); generate.Light(13); @@ -159,7 +41,7 @@ World::World(const Config &config) player->WorldCollidable(true); player->Position(config.spawn); - chunks.GenerateSurrounding(player->ChunkCoords()); + chunks.QueueSurrounding(player->ChunkCoords()); } @@ -305,6 +187,7 @@ void World::Render(Viewport &viewport) { viewport.WorldPosition(player->Transform(player->ChunkCoords())); BlockLighting &chunk_prog = viewport.ChunkProgram(); + chunk_prog.SetTexture(block_tex); chunk_prog.SetFogDensity(fog_density); for (Chunk &chunk : chunks.Loaded()) { @@ -321,10 +204,7 @@ void World::Render(Viewport &viewport) { entity_prog.SetFogDensity(fog_density); for (Entity &entity : entities) { - if (entity.HasShape()) { - entity_prog.SetM(entity.Transform(player->ChunkCoords())); - entity.Draw(); - } + entity.Render(entity.ChunkTransform(player->ChunkCoords()), entity_prog); } }