]> git.lizzy.rs Git - minetest.git/blobdiff - src/map.cpp
Initially add small and tight logging facility
[minetest.git] / src / map.cpp
index a8e7235cfdde19d994f86d39b5f4aefc2cb96e6c..a13c028fa22f895d396eb536869db6ea261399c3 100644 (file)
@@ -28,8 +28,11 @@ with this program; if not, write to the Free Software Foundation, Inc.,
 #include "porting.h"
 #include "mapgen.h"
 #include "nodemetadata.h"
-#include "content_nodemeta.h"
 #include "content_mapnode.h"
+#ifndef SERVER
+#include <IMaterialRenderer.h>
+#endif
+#include "settings.h"
 
 /*
        SQLite format specification:
@@ -772,7 +775,7 @@ void Map::updateLighting(enum LightBank bank,
                generation for testing or whatever
        */
 #if 0
-       //if(g_settings.get(""))
+       //if(g_settings->get(""))
        {
                core::map<v3s16, MapBlock*>::Iterator i;
                i = blocks_to_update.getIterator();
@@ -1016,20 +1019,9 @@ void Map::addNodeAndUpdate(v3s16 p, MapNode n,
        if(meta_proto)
        {
                NodeMetadata *meta = meta_proto->clone();
-               /* lockable chest, insert the owner's name */
-               if (meta->typeId() == CONTENT_LOCKABLE_CHEST)
-               {
-                       LockingChestNodeMetadata *lcm = (LockingChestNodeMetadata*)meta;
-                       lcm->setOwner(player_name);
-               }
+               meta->setOwner(player_name);
                setNodeMetadata(p, meta);
        }
-       else if (n.getContent() == CONTENT_LOCKABLE_CHEST)
-       {
-               LockingChestNodeMetadata *lcm =  new LockingChestNodeMetadata();
-               lcm->setOwner(player_name);
-               setNodeMetadata(p, (NodeMetadata*)lcm);
-       }
 
        /*
                If node is under sunlight and doesn't let sunlight through,
@@ -1909,7 +1901,7 @@ ServerMap::ServerMap(std::string savedir):
 
        //m_chunksize = 8; // Takes a few seconds
 
-       if (g_settings.get("fixed_map_seed").empty())
+       if (g_settings->get("fixed_map_seed").empty())
        {
                m_seed = (((u64)(myrand()%0xffff)<<0)
                                + ((u64)(myrand()%0xffff)<<16)
@@ -1918,7 +1910,7 @@ ServerMap::ServerMap(std::string savedir):
        }
        else
        {
-               m_seed = g_settings.getU64("fixed_map_seed");
+               m_seed = g_settings->getU64("fixed_map_seed");
        }
 
        /*
@@ -2056,7 +2048,7 @@ ServerMap::~ServerMap()
 
 void ServerMap::initBlockMake(mapgen::BlockMakeData *data, v3s16 blockpos)
 {
-       bool enable_mapgen_debug_info = g_settings.getBool("enable_mapgen_debug_info");
+       bool enable_mapgen_debug_info = g_settings->getBool("enable_mapgen_debug_info");
        if(enable_mapgen_debug_info)
                dstream<<"initBlockMake(): ("<<blockpos.X<<","<<blockpos.Y<<","
                                <<blockpos.Z<<")"<<std::endl;
@@ -2151,7 +2143,7 @@ MapBlock* ServerMap::finishBlockMake(mapgen::BlockMakeData *data,
                return NULL;
        }
 
-       bool enable_mapgen_debug_info = g_settings.getBool("enable_mapgen_debug_info");
+       bool enable_mapgen_debug_info = g_settings->getBool("enable_mapgen_debug_info");
 
        /*dstream<<"Resulting vmanip:"<<std::endl;
        data->vmanip.print(dstream);*/
@@ -2406,7 +2398,7 @@ MapBlock * ServerMap::generateBlock(
                        <<"("<<p.X<<","<<p.Y<<","<<p.Z<<")"
                        <<std::endl;*/
        
-       bool enable_mapgen_debug_info = g_settings.getBool("enable_mapgen_debug_info");
+       bool enable_mapgen_debug_info = g_settings->getBool("enable_mapgen_debug_info");
 
        TimeTaker timer("generateBlock");
        
@@ -3619,7 +3611,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(PI)
 {
        m_camera_mutex.Init();
        assert(m_camera_mutex.IsInitialized());
@@ -3728,6 +3721,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();
 
        /*
@@ -3820,7 +3814,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;
                        }
@@ -3940,6 +3935,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)
 {