diff --git a/src/client/client.cpp b/src/client/client.cpp index 34d05d256..7a465e553 100644 --- a/src/client/client.cpp +++ b/src/client/client.cpp @@ -1750,11 +1750,6 @@ void Client::addUpdateMeshTaskForNode(v3s16 nodepos, bool ack_to_server, bool ur addUpdateMeshTask(blockpos + v3s16(0, 0, -1), false, urgent); } -void Client::updateCameraOffset(v3s16 camera_offset) -{ - m_mesh_update_manager->m_camera_offset = camera_offset; -} - ClientEvent *Client::getClientEvent() { FATAL_ERROR_IF(m_client_event_queue.empty(), diff --git a/src/client/client.h b/src/client/client.h index e4bb77ab2..a02a7d8c6 100644 --- a/src/client/client.h +++ b/src/client/client.h @@ -300,8 +300,6 @@ public: void addUpdateMeshTaskWithEdge(v3s16 blockpos, bool ack_to_server=false, bool urgent=false); void addUpdateMeshTaskForNode(v3s16 nodepos, bool ack_to_server=false, bool urgent=false); - void updateCameraOffset(v3s16 camera_offset); - bool hasClientEvents() const { return !m_client_event_queue.empty(); } // Get event from queue. If queue is empty, it triggers an assertion failure. ClientEvent * getClientEvent(); diff --git a/src/client/game.cpp b/src/client/game.cpp index a4a4c9909..e88b5d1d1 100644 --- a/src/client/game.cpp +++ b/src/client/game.cpp @@ -2901,7 +2901,8 @@ void Game::updateChat(f32 dtime) void Game::updateCamera(f32 dtime) { - LocalPlayer *player = client->getEnv().getLocalPlayer(); + ClientEnvironment &env = client->getEnv(); + LocalPlayer *player = env.getLocalPlayer(); /* For interaction purposes, get info about the held item @@ -2940,7 +2941,7 @@ void Game::updateCamera(f32 dtime) float full_punch_interval = playeritem_toolcap.full_punch_interval; float tool_reload_ratio = runData.time_from_last_punch / full_punch_interval; - tool_reload_ratio = MYMIN(tool_reload_ratio, 1.0); + tool_reload_ratio = std::min(tool_reload_ratio, 1.0f); camera->update(player, dtime, tool_reload_ratio); camera->step(dtime); @@ -2953,13 +2954,12 @@ void Game::updateCamera(f32 dtime) v3f camera_position = camera->getPosition(); v3f camera_direction = camera->getDirection(); - client->getEnv().getClientMap().updateCamera(camera_position, + auto &env = client->getEnv(); + env.getClientMap().updateCamera(camera_position, camera_direction, camera_fov, camera_offset, player->light_color); if (m_camera_offset_changed) { - client->updateCameraOffset(camera_offset); - client->getEnv().updateCameraOffset(camera_offset); - + env.updateCameraOffset(camera_offset); clouds->updateCameraOffset(camera_offset); } } diff --git a/src/client/mapblock_mesh.cpp b/src/client/mapblock_mesh.cpp index a47bf5ae9..6eabe4c2d 100644 --- a/src/client/mapblock_mesh.cpp +++ b/src/client/mapblock_mesh.cpp @@ -608,7 +608,7 @@ void PartialMeshBuffer::draw(video::IVideoDriver *driver) const MapBlockMesh */ -MapBlockMesh::MapBlockMesh(Client *client, MeshMakeData *data, v3s16 camera_offset): +MapBlockMesh::MapBlockMesh(Client *client, MeshMakeData *data): m_tsrc(client->getTextureSource()), m_shdrsrc(client->getShaderSource()), m_bounding_sphere_center((data->m_side_length * 0.5f - 0.5f) * BS), @@ -692,7 +692,6 @@ MapBlockMesh::MapBlockMesh(Client *client, MeshMakeData *data, v3s16 camera_offs auto &info = m_animation_info[{layer, i}]; info.tile = p.layer; info.frame = 0; - info.frame_offset = 0; // Replace tile texture with the first animation frame p.layer.texture = (*p.layer.frames)[0].texture; } @@ -815,8 +814,8 @@ bool MapBlockMesh::animate(bool faraway, float time, int crack, for (auto &it : m_animation_info) { const TileLayer &tile = it.second.tile; // Figure out current frame - int frameno = (int)(time * 1000 / tile.animation_frame_length_ms - + it.second.frame_offset) % tile.animation_frame_count; + int frameno = (int)(time * 1000 / tile.animation_frame_length_ms) % + tile.animation_frame_count; // If frame doesn't change, skip if (frameno == it.second.frame) continue; diff --git a/src/client/mapblock_mesh.h b/src/client/mapblock_mesh.h index 61fefd284..5e69b9329 100644 --- a/src/client/mapblock_mesh.h +++ b/src/client/mapblock_mesh.h @@ -180,7 +180,7 @@ class MapBlockMesh { public: // Builds the mesh given - MapBlockMesh(Client *client, MeshMakeData *data, v3s16 camera_offset); + MapBlockMesh(Client *client, MeshMakeData *data); ~MapBlockMesh(); // Main animation function, parameters: @@ -248,7 +248,6 @@ public: private: struct AnimationInfo { int frame; // last animation frame - int frame_offset; TileLayer tile; }; diff --git a/src/client/mesh_generator_thread.cpp b/src/client/mesh_generator_thread.cpp index 70f4287ab..e511bc62c 100644 --- a/src/client/mesh_generator_thread.cpp +++ b/src/client/mesh_generator_thread.cpp @@ -202,8 +202,8 @@ void MeshUpdateQueue::fillDataFromMapBlocks(QueuedMeshUpdate *q) MeshUpdateWorkerThread */ -MeshUpdateWorkerThread::MeshUpdateWorkerThread(Client *client, MeshUpdateQueue *queue_in, MeshUpdateManager *manager, v3s16 *camera_offset) : - UpdateThread("Mesh"), m_client(client), m_queue_in(queue_in), m_manager(manager), m_camera_offset(camera_offset) +MeshUpdateWorkerThread::MeshUpdateWorkerThread(Client *client, MeshUpdateQueue *queue_in, MeshUpdateManager *manager) : + UpdateThread("Mesh"), m_client(client), m_queue_in(queue_in), m_manager(manager) { m_generation_interval = g_settings->getU16("mesh_generation_interval"); m_generation_interval = rangelim(m_generation_interval, 0, 50); @@ -220,7 +220,7 @@ void MeshUpdateWorkerThread::doUpdate() ScopeProfiler sp(g_profiler, "Client: Mesh making (sum)"); - MapBlockMesh *mesh_new = new MapBlockMesh(m_client, q->data, *m_camera_offset); + MapBlockMesh *mesh_new = new MapBlockMesh(m_client, q->data); MeshUpdateResult r; r.p = q->p; @@ -254,7 +254,7 @@ MeshUpdateManager::MeshUpdateManager(Client *client): infostream << "MeshUpdateManager: using " << number_of_threads << " threads" << std::endl; for (int i = 0; i < number_of_threads; i++) - m_workers.push_back(std::make_unique(client, &m_queue_in, this, &m_camera_offset)); + m_workers.push_back(std::make_unique(client, &m_queue_in, this)); } void MeshUpdateManager::updateBlock(Map *map, v3s16 p, bool ack_block_to_server, diff --git a/src/client/mesh_generator_thread.h b/src/client/mesh_generator_thread.h index 72e4c7bed..c8db03d28 100644 --- a/src/client/mesh_generator_thread.h +++ b/src/client/mesh_generator_thread.h @@ -93,7 +93,7 @@ class MeshUpdateManager; class MeshUpdateWorkerThread : public UpdateThread { public: - MeshUpdateWorkerThread(Client *client, MeshUpdateQueue *queue_in, MeshUpdateManager *manager, v3s16 *camera_offset); + MeshUpdateWorkerThread(Client *client, MeshUpdateQueue *queue_in, MeshUpdateManager *manager); protected: virtual void doUpdate(); @@ -102,7 +102,6 @@ private: Client *m_client; MeshUpdateQueue *m_queue_in; MeshUpdateManager *m_manager; - v3s16 *m_camera_offset; // TODO: Add callback to update these when g_settings changes int m_generation_interval; @@ -121,8 +120,6 @@ public: bool getNextResult(MeshUpdateResult &r); - v3s16 m_camera_offset; - void start(); void stop(); void wait(); diff --git a/src/client/tile.h b/src/client/tile.h index 4f5691bc5..7f4805e84 100644 --- a/src/client/tile.h +++ b/src/client/tile.h @@ -120,9 +120,6 @@ struct TileLayer MATERIAL_FLAG_TILEABLE_HORIZONTAL| MATERIAL_FLAG_TILEABLE_VERTICAL; - //! If true, the tile has its own color. - bool has_color = false; - std::vector *frames = nullptr; /*! @@ -131,6 +128,9 @@ struct TileLayer */ video::SColor color = video::SColor(0, 0, 0, 0); + //! If true, the tile has its own color. + bool has_color = false; + u8 scale = 1; };