X-Git-Url: http://git.localhorst.tv/?a=blobdiff_plain;f=src%2Fapp%2FClientState.cpp;h=b4ed3f8fbd31e871b6ca41e4dacf081bb9f03c7c;hb=09b734344f31e18d0fa31c39acba6d012aa2cc56;hp=c371235761558e94c0a73a3a0ff139a490654dcb;hpb=9ebe2c320fd9f94266ab93fa2f9d9908a0a284d3;p=blank.git diff --git a/src/app/ClientState.cpp b/src/app/ClientState.cpp index c371235..b4ed3f8 100644 --- a/src/app/ClientState.cpp +++ b/src/app/ClientState.cpp @@ -1,6 +1,7 @@ #include "ClientState.hpp" #include "Environment.hpp" +#include "init.hpp" #include "TextureIndex.hpp" namespace blank { @@ -9,19 +10,55 @@ ClientState::ClientState( Environment &env, const World::Config &wc, const WorldSave &ws, + const Interface::Config &ic, const Client::Config &cc ) : env(env) , block_types() , world(block_types, wc, ws) +, chunk_renderer(world, wc.load.load_dist) +, interface(ic, env, world) , client(cc, world) { + TextureIndex tex_index; + env.loader.LoadBlockTypes("default", block_types, tex_index); + chunk_renderer.LoadTextures(env.loader, tex_index); + chunk_renderer.FogDensity(wc.fog_density); + // TODO: better solution for initializing HUD + interface.SelectNext(); + client.SendLogin(ic.player_name); +} + +void ClientState::OnEnter() { + env.window.GrabMouse(); } void ClientState::Handle(const SDL_Event &event) { - if (event.type == SDL_QUIT) { - env.state.PopAll(); + switch (event.type) { + case SDL_KEYDOWN: + interface.HandlePress(event.key); + break; + case SDL_KEYUP: + interface.HandleRelease(event.key); + break; + case SDL_MOUSEBUTTONDOWN: + interface.HandlePress(event.button); + break; + case SDL_MOUSEBUTTONUP: + interface.HandleRelease(event.button); + break; + case SDL_MOUSEMOTION: + interface.Handle(event.motion); + break; + case SDL_MOUSEWHEEL: + interface.Handle(event.wheel); + break; + case SDL_QUIT: + env.state.Pop(); + break; + default: + break; } } @@ -32,11 +69,26 @@ void ClientState::Update(int dt) { if (client.TimedOut()) { env.state.Pop(); } + + interface.Update(dt); + world.Update(dt); + chunk_renderer.Rebase(interface.Player().ChunkCoords()); + chunk_renderer.Update(dt); + + glm::mat4 trans = interface.Player().Transform(interface.Player().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(interface.Player().Position()); + env.audio.Velocity(interface.Player().Velocity()); + env.audio.Orientation(dir, up); } void ClientState::Render(Viewport &viewport) { - + viewport.WorldPosition(interface.Player().Transform(interface.Player().ChunkCoords())); + chunk_renderer.Render(viewport); + world.Render(viewport); + interface.Render(viewport); } }