-void InteractiveState::PushPlayerUpdate(const Entity &player) {
- std::uint16_t packet = master.GetClient().SendPlayerUpdate(player);
- if (player_hist.size() < 16) {
- player_hist.emplace_back(player.GetState(), update_timer.Elapsed(), packet);
+void InteractiveState::Render(Viewport &viewport) {
+ viewport.WorldPosition(player.GetEntity().Transform(player.GetEntity().ChunkCoords()));
+ if (master.GetConfig().video.world) {
+ chunk_renderer.Render(viewport);
+ world.Render(viewport);
+ sky.Render(viewport);
+ }
+ hud.Render(viewport);
+}
+
+void InteractiveState::MergePlayerCorrection(std::uint16_t pack, const EntityState &state) {
+ input.MergePlayerCorrection(pack, state);
+}
+
+void InteractiveState::Handle(const Packet::BlockUpdate &pack) {
+ glm::ivec3 pos;
+ pack.ReadChunkCoords(pos);
+ Chunk *chunk = player.GetChunks().Get(pos);
+ if (!chunk) {
+ // this change doesn't concern us
+ return;
+ }
+ uint32_t count = 0;
+ pack.ReadBlockCount(count);
+ for (uint32_t i = 0; i < count; ++i) {
+ uint16_t index;
+ Block block;
+ pack.ReadIndex(index, i);
+ pack.ReadBlock(block, i);
+ if (index < Chunk::size && block.type < block_types.Size()) {
+ manip.SetBlock(*chunk, index, block);
+ }
+ }
+}
+
+void InteractiveState::SetAudio(bool b) {
+ master.GetConfig().audio.enabled = b;
+ if (b) {
+ hud.PostMessage("Audio enabled");