#include "log.h"
#include "map.h"
#include "mapblock.h"
+#include "mapgen_flat.h"
#include "mapgen_fractal.h"
#include "mapgen_v5.h"
#include "mapgen_v6.h"
#include "mapgen_v7.h"
+#include "mapgen_valleys.h"
#include "mapgen_singlenode.h"
#include "mg_biome.h"
#include "mg_ore.h"
{"v5", new MapgenFactoryV5, true},
{"v6", new MapgenFactoryV6, true},
{"v7", new MapgenFactoryV7, true},
- {"fractal", new MapgenFactoryFractal, false},
+ {"flat", new MapgenFactoryFlat, true},
+ {"fractal", new MapgenFactoryFractal, true},
+ {"valleys", new MapgenFactoryValleys, true},
{"singlenode", new MapgenFactorySinglenode, false},
};
void *callback_param)
{
EmergeThread *thread = NULL;
+ bool entry_already_exists = false;
{
MutexAutoLock queuelock(m_queue_mutex);
if (!pushBlockEmergeData(blockpos, peer_id, flags,
- callback, callback_param))
+ callback, callback_param, &entry_already_exists))
return false;
+ if (entry_already_exists)
+ return true;
+
thread = getOptimalThread();
thread->pushBlock(blockpos);
}
}
+int EmergeManager::getSpawnLevelAtPoint(v2s16 p)
+{
+ if (m_mapgens.size() == 0 || !m_mapgens[0]) {
+ errorstream << "EmergeManager: getSpawnLevelAtPoint() called"
+ " before mapgen init" << std::endl;
+ return 0;
+ }
+
+ return m_mapgens[0]->getSpawnLevelAtPoint(p);
+}
+
+
int EmergeManager::getGroundLevelAtPoint(v2s16 p)
{
if (m_mapgens.size() == 0 || !m_mapgens[0]) {
u16 peer_requested,
u16 flags,
EmergeCompletionCallback callback,
- void *callback_param)
+ void *callback_param,
+ bool *entry_already_exists)
{
u16 &count_peer = m_peer_queue_count[peer_requested];
findres = m_blocks_enqueued.insert(std::make_pair(pos, BlockEmergeData()));
BlockEmergeData &bedata = findres.first->second;
- bool update_existing = !findres.second;
+ *entry_already_exists = !findres.second;
if (callback)
bedata.callbacks.push_back(std::make_pair(callback, callback_param));
- if (update_existing) {
+ if (*entry_already_exists) {
bedata.flags |= flags;
} else {
bedata.flags = flags;