X-Git-Url: http://git.localhorst.tv/?a=blobdiff_plain;f=src%2Fstandalone%2FMasterState.cpp;h=635f2733fc4590317e36cd365e3ef9a2e52ce109;hb=ccd6e7001572808400b9cb9bc91f9bedcf28a1ad;hp=30925a971db74b41ea39cc419bcfb1b5acac70f2;hpb=e1209ec25c4cc91e13889876106f56bd51aa96e2;p=blank.git diff --git a/src/standalone/MasterState.cpp b/src/standalone/MasterState.cpp index 30925a9..635f273 100644 --- a/src/standalone/MasterState.cpp +++ b/src/standalone/MasterState.cpp @@ -1,5 +1,6 @@ #include "MasterState.hpp" +#include "../app/Config.hpp" #include "../app/Environment.hpp" #include "../app/init.hpp" #include "../app/TextureIndex.hpp" @@ -12,18 +13,23 @@ namespace standalone { MasterState::MasterState( Environment &env, + Config &config, const Generator::Config &gc, - const Interface::Config &ic, const World::Config &wc, const WorldSave &save ) -: env(env) +: config(config) +, env(env) , block_types() , world(block_types, wc) -, interface(ic, env, world, world.AddPlayer(ic.player_name)) +, player(*world.AddPlayer(config.player.name)) +, hud(env, config, player) +, manip(env, player.GetEntity()) +, input(world, player, manip) +, interface(config, env.keymap, input, *this) , generator(gc) , chunk_loader(world.Chunks(), generator, save) -, chunk_renderer(*interface.GetPlayer().chunks) +, chunk_renderer(player.GetChunks()) , skeletons() , spawner(world, skeletons, gc.seed) , sky(env.loader.LoadCubeMap("skybox")) @@ -31,12 +37,11 @@ MasterState::MasterState( , unload(env, world.Chunks(), save) { TextureIndex tex_index; env.loader.LoadBlockTypes("default", block_types, tex_index); + interface.SetInventorySlots(block_types.Size() - 1); chunk_renderer.LoadTextures(env.loader, tex_index); chunk_renderer.FogDensity(wc.fog_density); skeletons.Load(); spawner.LimitSkeletons(0, skeletons.Size()); - // TODO: better solution for initializing HUD - interface.SelectNext(); } @@ -75,30 +80,78 @@ void MasterState::Handle(const SDL_Event &event) { } void MasterState::Update(int dt) { - interface.Update(dt); + input.Update(dt); + if (input.BlockFocus()) { + hud.FocusBlock(input.BlockFocus().GetChunk(), input.BlockFocus().block); + } else if (input.EntityFocus()) { + hud.FocusEntity(*input.EntityFocus().entity); + } else { + hud.FocusNone(); + } + hud.Display(block_types[player.GetInventorySlot() + 1]); + hud.Update(dt); spawner.Update(dt); world.Update(dt); chunk_loader.Update(dt); chunk_renderer.Update(dt); - Entity &player = *interface.GetPlayer().entity; - - glm::mat4 trans = player.Transform(player.ChunkCoords()); + glm::mat4 trans = player.GetEntity().Transform(player.GetEntity().ChunkCoords()); glm::vec3 dir(trans * glm::vec4(0.0f, 0.0f, -1.0f, 0.0f)); glm::vec3 up(trans * glm::vec4(0.0f, 1.0f, 0.0f, 0.0f)); - env.audio.Position(player.Position()); - env.audio.Velocity(player.Velocity()); + env.audio.Position(player.GetEntity().Position()); + env.audio.Velocity(player.GetEntity().Velocity()); env.audio.Orientation(dir, up); } void MasterState::Render(Viewport &viewport) { - Entity &player = *interface.GetPlayer().entity; - viewport.WorldPosition(player.Transform(player.ChunkCoords())); - chunk_renderer.Render(viewport); - world.Render(viewport); - sky.Render(viewport); + viewport.WorldPosition(player.GetEntity().Transform(player.GetEntity().ChunkCoords())); + if (config.video.world) { + chunk_renderer.Render(viewport); + world.Render(viewport); + sky.Render(viewport); + } + hud.Render(viewport); +} + + +void MasterState::SetAudio(bool b) { + config.audio.enabled = b; + if (b) { + hud.PostMessage("Audio enabled"); + } else { + hud.PostMessage("Audio disabled"); + } +} + +void MasterState::SetVideo(bool b) { + config.video.world = b; + if (b) { + hud.PostMessage("World rendering enabled"); + } else { + hud.PostMessage("World rendering disabled"); + } +} + +void MasterState::SetHUD(bool b) { + config.video.hud = b; + if (b) { + hud.PostMessage("HUD rendering enabled"); + } else { + hud.PostMessage("HUD rendering disabled"); + } +} + +void MasterState::SetDebug(bool b) { + config.video.debug = b; + if (b) { + hud.PostMessage("Debug rendering enabled"); + } else { + hud.PostMessage("Debug rendering disabled"); + } +} - interface.Render(viewport); +void MasterState::Exit() { + env.state.Pop(); } }