+ //scene::SMesh *mesh;
+ //JMutex mesh_mutex;
+
+ MapDrawControl &m_control;
+
+ v3f m_camera_position;
+ v3f m_camera_direction;
+ f32 m_camera_fov;
+ JMutex m_camera_mutex;
+
+ core::map<v2s16, bool> m_last_drawn_sectors;
+};
+
+#endif
+
+class MapVoxelManipulator : public VoxelManipulator
+{
+public:
+ MapVoxelManipulator(Map *map);
+ virtual ~MapVoxelManipulator();
+
+ virtual void clear()
+ {
+ VoxelManipulator::clear();
+ m_loaded_blocks.clear();
+ }
+
+ virtual void emerge(VoxelArea a, s32 caller_id=-1);
+
+ void blitBack(core::map<v3s16, MapBlock*> & modified_blocks);
+
+protected:
+ Map *m_map;
+ /*
+ key = blockpos
+ value = block existed when loaded
+ */
+ core::map<v3s16, bool> m_loaded_blocks;
+};
+
+class ManualMapVoxelManipulator : public MapVoxelManipulator
+{
+public:
+ ManualMapVoxelManipulator(Map *map);
+ virtual ~ManualMapVoxelManipulator();
+
+ void setMap(Map *map)
+ {m_map = map;}
+
+ virtual void emerge(VoxelArea a, s32 caller_id=-1);
+
+ void initialEmerge(v3s16 blockpos_min, v3s16 blockpos_max);
+
+ // This is much faster with big chunks of generated data
+ void blitBackAll(core::map<v3s16, MapBlock*> * modified_blocks);
+
+protected:
+ bool m_create_area;