X-Git-Url: http://git.localhorst.tv/?a=blobdiff_plain;f=src%2Fclient%2Fclient.cpp;h=455550afeccc27500120409a1b8162be50a5fdc6;hb=54f3f1260b95a924fcb40d9d6de3fa2e2c382f6f;hp=236fa1a41fe0872a35d5a819da2f186fa764b998;hpb=9c5308ba4108bd842af6d9d2e893ea575a7e6ca8;p=blank.git diff --git a/src/client/client.cpp b/src/client/client.cpp index 236fa1a..455550a 100644 --- a/src/client/client.cpp +++ b/src/client/client.cpp @@ -48,11 +48,12 @@ void InitialState::Render(Viewport &viewport) { InteractiveState::InteractiveState(MasterState &master, uint32_t player_id) : master(master) , res() +, sounds() , save(master.GetEnv().config.GetWorldPath(master.GetWorldConf().name, master.GetConfig().net.host)) , world(res.block_types, master.GetWorldConf()) , player(*world.AddPlayer(master.GetConfig().player.name)) , hud(master.GetEnv(), master.GetConfig(), player) -, manip(master.GetEnv(), player.GetEntity()) +, manip(master.GetEnv().audio, sounds, player.GetEntity()) , input(world, player, master.GetClient()) , interface(master.GetConfig(), master.GetEnv().keymap, input, *this) , chunk_receiver(world.Chunks(), save) @@ -64,6 +65,11 @@ InteractiveState::InteractiveState(MasterState &master, uint32_t player_id) save.Write(master.GetWorldConf()); } res.Load(master.GetEnv().loader, "default"); + if (res.models.size() < 1) { + throw std::runtime_error("need at least one model to run"); + } + res.models[0].Instantiate(player.GetEntity().GetModel()); + sounds.Load(master.GetEnv().loader, res.snd_index); interface.SetInventorySlots(res.block_types.size() - 1); chunk_renderer.LoadTextures(master.GetEnv().loader, res.tex_index); chunk_renderer.FogDensity(master.GetWorldConf().fog_density); @@ -141,7 +147,9 @@ void InteractiveState::Update(int dt) { } void InteractiveState::Render(Viewport &viewport) { - viewport.WorldPosition(player.GetEntity().Transform(player.GetEntity().ChunkCoords())); + viewport.WorldPosition( + player.GetEntity().Transform(player.GetEntity().ChunkCoords()) + * player.GetEntity().GetModel().EyesTransform()); if (master.GetConfig().video.world) { chunk_renderer.Render(viewport); world.Render(viewport); @@ -374,6 +382,8 @@ void MasterState::On(const Packet::Join &pack) { state.reset(new InteractiveState(*this, player_id)); pack.ReadPlayerState(state->GetPlayer().GetEntity().GetState()); + glm::vec3 orient(glm::eulerAngles(state->GetPlayer().GetEntity().Orientation())); + state->GetPlayerController().TurnHead(orient.x, orient.y); env.state.PopAfter(this); env.state.Push(state.get());