Commented out debug statements again
[oweals/minetest.git] / src / map.cpp
index 5e2fd558c2756704c7ba3f9c8dd45a026032d95b..b1908fe2ea4091b526e4dc98277413c8f1bce09d 100644 (file)
@@ -1408,6 +1408,7 @@ void Map::timerUpdate(float dtime, float unload_timeout,
 
        core::map<v2s16, MapSector*>::Iterator si;
 
+       beginSave();
        si = m_sectors.getIterator();
        for(; si.atEnd() == false; si++)
        {
@@ -1418,7 +1419,6 @@ void Map::timerUpdate(float dtime, float unload_timeout,
                core::list<MapBlock*> blocks;
                sector->getBlocks(blocks);
                
-               beginSave();
                for(core::list<MapBlock*>::Iterator i = blocks.begin();
                                i != blocks.end(); i++)
                {
@@ -1451,13 +1451,13 @@ void Map::timerUpdate(float dtime, float unload_timeout,
                                all_blocks_deleted = false;
                        }
                }
-               endSave();
 
                if(all_blocks_deleted)
                {
                        sector_deletion_queue.push_back(si.getNode()->getKey());
                }
        }
+       endSave();
        
        // Finally delete the empty sectors
        deleteSectors(sector_deletion_queue);
@@ -3397,6 +3397,9 @@ void ServerMap::loadBlock(std::string sectordir, std::string blockfile, MapSecto
                if(version < SER_FMT_VER_HIGHEST || save_after_load)
                {
                        saveBlock(block);
+                       
+                       // Should be in database now, so delete the old file
+                       fs::RecursiveDelete(fullpath);
                }
                
                // We just loaded it from the disk, so it's up-to-date.
@@ -3601,7 +3604,8 @@ ClientMap::ClientMap(
        m_client(client),
        m_control(control),
        m_camera_position(0,0,0),
-       m_camera_direction(0,0,1)
+       m_camera_direction(0,0,1),
+       m_camera_fov(M_PI)
 {
        m_camera_mutex.Init();
        assert(m_camera_mutex.IsInitialized());
@@ -3710,6 +3714,7 @@ void ClientMap::renderMap(video::IVideoDriver* driver, s32 pass)
        m_camera_mutex.Lock();
        v3f camera_position = m_camera_position;
        v3f camera_direction = m_camera_direction;
+       f32 camera_fov = m_camera_fov;
        m_camera_mutex.Unlock();
 
        /*
@@ -3802,7 +3807,8 @@ void ClientMap::renderMap(video::IVideoDriver* driver, s32 pass)
                        
                        float d = 0.0;
                        if(isBlockInSight(block->getPos(), camera_position,
-                                       camera_direction, range, &d) == false)
+                                       camera_direction, camera_fov,
+                                       range, &d) == false)
                        {
                                continue;
                        }
@@ -3922,6 +3928,35 @@ void ClientMap::renderMap(video::IVideoDriver* driver, s32 pass)
                        <<", rendered "<<vertex_count<<" vertices."<<std::endl;*/
 }
 
+void ClientMap::renderPostFx()
+{
+       // Sadly ISceneManager has no "post effects" render pass, in that case we
+       // could just register for that and handle it in renderMap().
+
+       m_camera_mutex.Lock();
+       v3f camera_position = m_camera_position;
+       m_camera_mutex.Unlock();
+
+       MapNode n = getNodeNoEx(floatToInt(camera_position, BS));
+
+       // - If the player is in a solid node, make everything black.
+       // - If the player is in liquid, draw a semi-transparent overlay.
+       ContentFeatures& features = content_features(n);
+       video::SColor post_effect_color = features.post_effect_color;
+       if(features.solidness == 2 && g_settings.getBool("free_move") == false)
+       {
+               post_effect_color = video::SColor(255, 0, 0, 0);
+       }
+       if (post_effect_color.getAlpha() != 0)
+       {
+               // Draw a full-screen rectangle
+               video::IVideoDriver* driver = SceneManager->getVideoDriver();
+               v2u32 ss = driver->getScreenSize();
+               core::rect<s32> rect(0,0, ss.X, ss.Y);
+               driver->draw2DRectangle(post_effect_color, rect);
+       }
+}
+
 bool ClientMap::setTempMod(v3s16 p, NodeMod mod,
                core::map<v3s16, MapBlock*> *affected_blocks)
 {