summaryrefslogtreecommitdiff
path: root/src/map.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/map.h')
-rw-r--r--src/map.h72
1 files changed, 34 insertions, 38 deletions
diff --git a/src/map.h b/src/map.h
index e8d40e982..4b6e08f96 100644
--- a/src/map.h
+++ b/src/map.h
@@ -37,7 +37,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "map_settings_manager.h"
class Settings;
-class Database;
+class MapDatabase;
class ClientMap;
class MapSector;
class ServerMapSector;
@@ -193,6 +193,8 @@ public:
virtual MapBlock * emergeBlock(v3s16 p, bool create_blank=true)
{ return getBlockNoCreateNoEx(p); }
+ inline INodeDefManager * getNodeDefManager() { return m_nodedef; }
+
// Returns InvalidPositionException if not found
bool isNodeUnderground(v3s16 p);
@@ -206,22 +208,6 @@ public:
// position is valid, otherwise false
MapNode getNodeNoEx(v3s16 p, bool *is_valid_position = NULL);
- void unspreadLight(enum LightBank bank,
- std::map<v3s16, u8> & from_nodes,
- std::set<v3s16> & light_sources,
- std::map<v3s16, MapBlock*> & modified_blocks);
-
- void spreadLight(enum LightBank bank,
- std::set<v3s16> & from_nodes,
- std::map<v3s16, MapBlock*> & modified_blocks);
-
- void updateLighting(enum LightBank bank,
- std::map<v3s16, MapBlock*> & a_blocks,
- std::map<v3s16, MapBlock*> & modified_blocks);
-
- void updateLighting(std::map<v3s16, MapBlock*> & a_blocks,
- std::map<v3s16, MapBlock*> & modified_blocks);
-
/*
These handle lighting but not faces.
*/
@@ -280,7 +266,8 @@ public:
// For debug printing. Prints "Map: ", "ServerMap: " or "ClientMap: "
virtual void PrintInfo(std::ostream &out);
- void transformLiquids(std::map<v3s16, MapBlock*> & modified_blocks);
+ void transformLiquids(std::map<v3s16, MapBlock*> & modified_blocks,
+ ServerEnvironment *env);
/*
Node metadata
@@ -328,6 +315,7 @@ public:
void transforming_liquid_add(v3s16 p);
s32 transforming_liquid_size();
+ bool isBlockOccluded(MapBlock *block, v3s16 cam_pos_nodes);
protected:
friend class LuaVoxelManip;
@@ -346,10 +334,16 @@ protected:
// Queued transforming water nodes
UniqueQueue<v3s16> m_transforming_liquid;
+ // This stores the properties of the nodes on the map.
+ INodeDefManager *m_nodedef;
+
+ bool isOccluded(v3s16 p0, v3s16 p1, float step, float stepfac,
+ float start_off, float end_off, u32 needed_count);
+
private:
f32 m_transforming_liquid_loop_count_multiplier;
u32 m_unprocessed_count;
- u32 m_inc_trending_up_start_time; // milliseconds
+ u64 m_inc_trending_up_start_time; // milliseconds
bool m_queue_size_timer_started;
DISABLE_CLASS_COPY(Map);
@@ -367,7 +361,7 @@ public:
/*
savedir: directory to which map data should be saved
*/
- ServerMap(std::string savedir, IGameDef *gamedef, EmergeManager *emerge);
+ ServerMap(const std::string &savedir, IGameDef *gamedef, EmergeManager *emerge);
~ServerMap();
s32 mapType() const
@@ -383,9 +377,12 @@ public:
*/
ServerMapSector *createSector(v2s16 p);
+ bool saoPositionOverLimit(const v3f &p);
+
/*
Blocks are generated by using these and makeBlock().
*/
+ bool blockpos_over_mapgen_limit(v3s16 p);
bool initBlockMake(v3s16 blockpos, BlockMakeData *data);
void finishBlockMake(BlockMakeData *data,
std::map<v3s16, MapBlock*> *changed_blocks);
@@ -414,9 +411,6 @@ public:
*/
MapBlock *getBlockOrEmerge(v3s16 p3d);
- // Carries out any initialization necessary before block is sent
- void prepareBlock(MapBlock *block);
-
// Helper for placing objects on ground level
s16 findGroundLevel(v2s16 p2d);
@@ -428,16 +422,14 @@ public:
// returns something like "map/sectors/xxxxxxxx"
std::string getSectorDir(v2s16 pos, int layout = 2);
// dirname: final directory name
- v2s16 getSectorPos(std::string dirname);
- v3s16 getBlockPos(std::string sectordir, std::string blockfile);
+ v2s16 getSectorPos(const std::string &dirname);
+ v3s16 getBlockPos(const std::string &sectordir, const std::string &blockfile);
static std::string getBlockFilename(v3s16 p);
/*
Database functions
*/
- static Database *createDatabase(const std::string &name, const std::string &savedir, Settings &conf);
- // Verify we can read/write to the database
- void verifyDatabase();
+ static MapDatabase *createDatabase(const std::string &name, const std::string &savedir, Settings &conf);
// Returns true if the database file does not exist
bool loadFromFolders();
@@ -464,17 +456,11 @@ public:
MapSector* loadSectorMeta(std::string dirname, bool save_after_load);
bool loadSectorMeta(v2s16 p2d);
- // Full load of a sector including all blocks.
- // returns true on success, false on failure.
- bool loadSectorFull(v2s16 p2d);
- // If sector is not found in memory, try to load it from disk.
- // Returns true if sector now resides in memory
- //bool deFlushSector(v2s16 p2d);
-
bool saveBlock(MapBlock *block);
- static bool saveBlock(MapBlock *block, Database *db);
+ static bool saveBlock(MapBlock *block, MapDatabase *db);
// This will generate a sector with getSector if not found.
- void loadBlock(std::string sectordir, std::string blockfile, MapSector *sector, bool save_after_load=false);
+ void loadBlock(const std::string &sectordir, const std::string &blockfile,
+ MapSector *sector, bool save_after_load=false);
MapBlock* loadBlock(v3s16 p);
// Database version
void loadBlock(std::string *blob, v3s16 p3d, MapSector *sector, bool save_after_load=false);
@@ -491,6 +477,16 @@ public:
u64 getSeed();
s16 getWaterLevel();
+ /*!
+ * Fixes lighting in one map block.
+ * May modify other blocks as well, as light can spread
+ * out of the specified block.
+ * Returns false if the block is not generated (so nothing
+ * changed), true otherwise.
+ */
+ bool repairBlockLight(v3s16 blockpos,
+ std::map<v3s16, MapBlock *> *modified_blocks);
+
MapSettingsManager settings_mgr;
private:
@@ -513,7 +509,7 @@ private:
This is reset to false when written on disk.
*/
bool m_map_metadata_changed;
- Database *dbase;
+ MapDatabase *dbase;
};