void GameMapRandomizer::RandomizeTerrain(
    GameMapSectionManagerInterface *manager,
    int width, int height,
    int section_width, int section_height) {
  manager_ = manager;
  width_ = width;
  height_ = height;
  section_width_ = section_width;
  section_height_ = section_height;

  // 1. Lay down grass foundation
  BuildFoundation();
  // 2. Add a random amount of dirt everywhere
  GenerateDirt();
  // 4. Add some objects
  AddObjects();
  // 5. Add water
  GenerateWater();
  // 6. Add spawnpoint
  AddSpawnpoint();
  // 7. Add dirt roads
  GenerateRoads();
  // 8. Add dirt around water
  AddWaterDirt();
  // 9. Fix corners for water and dirt
  // DONE
}
示例#2
0
void CMapGen::GenerateMap()
{
	if (!m_pLayers->MineTeeLayer())
		return;

	dbg_msg("MapGen", "Generating '%s' map...", g_Config.m_SvMapGenerationSize);


	int MineTeeLayerSize = m_pLayers->MineTeeLayer()->m_Width*m_pLayers->MineTeeLayer()->m_Height;

	// clear map, but keep background, envelopes etc
	for(int i = 0; i < MineTeeLayerSize; i++)
	{
		int x = i%m_pLayers->MineTeeLayer()->m_Width;
		ivec2 TilePos(x, (i-x)/m_pLayers->MineTeeLayer()->m_Width);
		
		// clear the different layers
		m_pCollision->ModifTile(TilePos, m_pLayers->GetMineTeeGroupIndex(), m_pLayers->GetMineTeeLayerIndex(), 0, 0);
		m_pCollision->ModifTile(TilePos, m_pLayers->GetMineTeeGroupIndex(), m_pLayers->GetMineTeeFGLayerIndex(), 0, 0);
		m_pCollision->ModifTile(TilePos, m_pLayers->GetMineTeeGroupIndex(), m_pLayers->GetMineTeeBGLayerIndex(), 0, 0);
	}

	/* ~~~~~~~~~~~~~~~~~~~~~~~~~~ */
	/* ~~~ Generate the world ~~~ */
	/* ~~~~~~~~~~~~~~~~~~~~~~~~~~ */

	// terrain
	GenerateBasicTerrain();
	// ores
	GenerateOre(CBlockManager::COAL_ORE, 200.0f, COAL_LEVEL, 50, 4);
	GenerateOre(CBlockManager::IRON_ORE, 320.0f, IRON_LEVEL, 30, 2);
	GenerateOre(CBlockManager::GOLD_ORE, 350.0f, GOLD_LEVEL, 15, 2);
	GenerateOre(CBlockManager::DIAMOND_ORE, 680.0f, DIAMOND_LEVEL, 15, 1);
	// /ores1
	GenerateCaves();
	GenerateWater();

	// vegetation
	GenerateFlowers();
	GenerateMushrooms();
	GenerateTrees();

	// misc
	GenerateBorder(); // as long as there are no infinite (chunked) maps

	// Performance
	GenerateSkip();
}