Use true distance for block priority.
[oweals/minetest.git] / src / clientmap.h
index f36e6127c1ff5a704fd9d86a333f6087f8f26546..84228f4ca5d59a8a4a1953337863038d1fe56538 100644 (file)
@@ -22,6 +22,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
 
 #include "irrlichttypes_extrabloated.h"
 #include "map.h"
+#include "camera.h"
 #include <set>
 #include <map>
 
@@ -29,9 +30,9 @@ struct MapDrawControl
 {
        MapDrawControl():
                range_all(false),
-               wanted_range(50),
+               wanted_range(0),
                wanted_max_blocks(0),
-               wanted_min_range(0),
+               show_wireframe(false),
                blocks_drawn(0),
                blocks_would_have_drawn(0),
                farthest_drawn(0)
@@ -43,8 +44,8 @@ struct MapDrawControl
        float wanted_range;
        // Maximum number of blocks to draw
        u32 wanted_max_blocks;
-       // Blocks in this range are drawn regardless of number of blocks drawn
-       float wanted_min_range;
+       // show a wire frame for debugging
+       bool show_wireframe;
        // Number of blocks rendered is written here by the renderer
        u32 blocks_drawn;
        // Number of blocks that would have been drawn in wanted_range
@@ -58,7 +59,7 @@ class ITextureSource;
 
 /*
        ClientMap
-       
+
        This is the only map class that is able to render itself on screen.
 */
 
@@ -67,7 +68,6 @@ class ClientMap : public Map, public scene::ISceneNode
 public:
        ClientMap(
                        Client *client,
-                       IGameDef *gamedef,
                        MapDrawControl &control,
                        scene::ISceneNode* parent,
                        scene::ISceneManager* mgr,
@@ -86,12 +86,12 @@ public:
                ISceneNode::drop();
        }
 
-       void updateCamera(v3f pos, v3f dir, f32 fov)
+       void updateCamera(v3f pos, v3f dir, f32 fov, v3s16 offset)
        {
-               JMutexAutoLock lock(m_camera_mutex);
                m_camera_position = pos;
                m_camera_direction = dir;
                m_camera_fov = fov;
+               m_camera_offset = offset;
        }
 
        /*
@@ -113,44 +113,46 @@ public:
                driver->setTransform(video::ETS_WORLD, AbsoluteTransformation);
                renderMap(driver, SceneManager->getSceneNodeRenderPass());
        }
-       
-       virtual const core::aabbox3d<f32>& getBoundingBox() const
+
+       virtual const aabb3f &getBoundingBox() const
        {
                return m_box;
        }
-       
+
+       void getBlocksInViewRange(v3s16 cam_pos_nodes,
+               v3s16 *p_blocks_min, v3s16 *p_blocks_max);
        void updateDrawList(video::IVideoDriver* driver);
        void renderMap(video::IVideoDriver* driver, s32 pass);
 
        int getBackgroundBrightness(float max_d, u32 daylight_factor,
                        int oldvalue, bool *sunlight_seen_result);
 
-       void renderPostFx();
+       void renderPostFx(CameraMode cam_mode);
 
        // For debug printing
        virtual void PrintInfo(std::ostream &out);
-       
-       // Check if sector was drawn on last render()
-       bool sectorWasDrawn(v2s16 p)
-       {
-               return (m_last_drawn_sectors.find(p) != m_last_drawn_sectors.end());
-       }
-       
+
+       const MapDrawControl & getControl() const { return m_control; }
+       f32 getCameraFov() const { return m_camera_fov; }
 private:
        Client *m_client;
-       
-       core::aabbox3d<f32> m_box;
-       
+
+       aabb3f m_box;
+
        MapDrawControl &m_control;
 
        v3f m_camera_position;
        v3f m_camera_direction;
        f32 m_camera_fov;
-       JMutex m_camera_mutex;
+       v3s16 m_camera_offset;
 
        std::map<v3s16, MapBlock*> m_drawlist;
-       
+
        std::set<v2s16> m_last_drawn_sectors;
+
+       bool m_cache_trilinear_filter;
+       bool m_cache_bilinear_filter;
+       bool m_cache_anistropic_filter;
 };
 
 #endif