#include "voxel.h"
#include "modifiedstate.h"
#include "util/container.h"
+#include "util/metricsbackend.h"
#include "nodetimer.h"
#include "map_settings_manager.h"
#include "debug.h"
class IGameDef;
class IRollbackManager;
class EmergeManager;
+class MetricsBackend;
class ServerEnvironment;
struct BlockMakeData;
MapEditEvent() = default;
- MapEditEvent * clone()
- {
- MapEditEvent *event = new MapEditEvent();
- event->type = type;
- event->p = p;
- event->n = n;
- event->modified_blocks = modified_blocks;
- event->is_private_change = is_private_change;
- return event;
- }
-
- VoxelArea getArea()
+ VoxelArea getArea() const
{
switch(type){
case MEET_ADDNODE:
{
public:
// event shall be deleted by caller after the call.
- virtual void onMapEditEvent(MapEditEvent *event) = 0;
+ virtual void onMapEditEvent(const MapEditEvent &event) = 0;
};
class Map /*: public NodeContainer*/
{
public:
- Map(std::ostream &dout, IGameDef *gamedef);
+ Map(IGameDef *gamedef);
virtual ~Map();
DISABLE_CLASS_COPY(Map);
void addEventReceiver(MapEventReceiver *event_receiver);
void removeEventReceiver(MapEventReceiver *event_receiver);
// event shall be deleted by caller after the call.
- void dispatchEvent(MapEditEvent *event);
+ void dispatchEvent(const MapEditEvent &event);
// On failure returns NULL
MapSector * getSectorNoGenerateNoLock(v2s16 p2d);
// Same as the above (there exists no lock anymore)
MapSector * getSectorNoGenerate(v2s16 p2d);
- // Gets an existing sector or creates an empty one
- //MapSector * getSectorCreate(v2s16 p2d);
/*
This is overloaded by ClientMap and ServerMap to allow
MapBlock * getBlockNoCreate(v3s16 p);
// Returns NULL if not found
MapBlock * getBlockNoCreateNoEx(v3s16 p);
-
+
+ void listAllLoadedBlocks(std::vector<v3s16> &dst);
+
/* Server overrides */
virtual MapBlock * emergeBlock(v3s16 p, bool create_blank=true)
{ return getBlockNoCreateNoEx(p); }
void setNodeTimer(const NodeTimer &t);
void removeNodeTimer(v3s16 p);
- /*
- Misc.
- */
- std::map<v2s16, MapSector*> *getSectorsPtr(){return &m_sectors;}
-
/*
Variables
*/
protected:
friend class LuaVoxelManip;
- std::ostream &m_dout; // A bit deprecated, could be removed
-
IGameDef *m_gamedef;
std::set<MapEventReceiver*> m_event_receivers;
/*
savedir: directory to which map data should be saved
*/
- ServerMap(const std::string &savedir, IGameDef *gamedef, EmergeManager *emerge);
+ ServerMap(const std::string &savedir, IGameDef *gamedef, EmergeManager *emerge, MetricsBackend *mb);
~ServerMap();
s32 mapType() const
*/
MapBlock *getBlockOrEmerge(v3s16 p3d);
- // Helper for placing objects on ground level
- s16 findGroundLevel(v2s16 p2d);
-
- /*
- Misc. helper functions for fiddling with directory and file
- names when saving
- */
- void createDirs(const std::string &path);
- // returns something like "map/sectors/xxxxxxxx"
- std::string getSectorDir(v2s16 pos, int layout = 2);
- // dirname: final directory name
- v2s16 getSectorPos(const std::string &dirname);
- v3s16 getBlockPos(const std::string §ordir, const std::string &blockfile);
- static std::string getBlockFilename(v3s16 p);
-
/*
Database functions
*/
static MapDatabase *createDatabase(const std::string &name, const std::string &savedir, Settings &conf);
- // Returns true if the database file does not exist
- bool loadFromFolders();
-
// Call these before and after saving of blocks
void beginSave();
void endSave();
void save(ModifiedState save_level);
void listAllLoadableBlocks(std::vector<v3s16> &dst);
- void listAllLoadedBlocks(std::vector<v3s16> &dst);
MapgenParams *getMapgenParams();
bool saveBlock(MapBlock *block);
- static bool saveBlock(MapBlock *block, MapDatabase *db);
- // This will generate a sector with getSector if not found.
- void loadBlock(const std::string §ordir, const std::string &blockfile,
- MapSector *sector, bool save_after_load=false);
+ static bool saveBlock(MapBlock *block, MapDatabase *db, int compression_level = -1);
MapBlock* loadBlock(v3s16 p);
// Database version
void loadBlock(std::string *blob, v3s16 p3d, MapSector *sector, bool save_after_load=false);
bool isSavingEnabled(){ return m_map_saving_enabled; }
u64 getSeed();
- s16 getWaterLevel();
/*!
* Fixes lighting in one map block.
std::string m_savedir;
bool m_map_saving_enabled;
-#if 0
- // Chunk size in MapSectors
- // If 0, chunks are disabled.
- s16 m_chunksize;
- // Chunks
- core::map<v2s16, MapChunk*> m_chunks;
-#endif
+ int m_map_compression_level;
+
+ std::set<v3s16> m_chunks_in_progress;
/*
Metadata is re-written on disk only if this is true.
bool m_map_metadata_changed = true;
MapDatabase *dbase = nullptr;
MapDatabase *dbase_ro = nullptr;
+
+ MetricCounterPtr m_save_time_counter;
};