+ 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");
+ } else {
+ hud.PostMessage("Audio disabled");
+ }
+}
+
+void InteractiveState::SetVideo(bool b) {
+ master.GetConfig().video.world = b;
+ if (b) {
+ hud.PostMessage("World rendering enabled");
+ } else {
+ hud.PostMessage("World rendering disabled");
+ }
+}
+
+void InteractiveState::SetHUD(bool b) {
+ master.GetConfig().video.hud = b;
+ if (b) {
+ hud.PostMessage("HUD rendering enabled");
+ } else {
+ hud.PostMessage("HUD rendering disabled");
+ }
+}
+
+void InteractiveState::SetDebug(bool b) {
+ master.GetConfig().video.debug = b;
+ if (b) {
+ hud.PostMessage("Debug rendering enabled");
+ } else {
+ hud.PostMessage("Debug rendering disabled");
+ }
+}
+
+void InteractiveState::Exit() {
+ save.Write(player);
+ master.Quit();