| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368 |
- #include "biome.h"
- bool BiomesManager::loadAllBiomes()
- {
- *this = {};
- //forest 0
- {
- Biome plains;
- plains.name = "forest";
- plains.color = {0.2,0.7,0.3};
- plains.surfaceBlock = BlockTypes::grassBlock;
- plains.secondaryBlock = BlockTypes::dirt;
- plains.treeType = Biome::treeNormal;
- plains.forestTresshold = 0.55;
- plains.jusGrassTresshold = 0.3;
- plains.treeChanceRemap = {0.01, 0.1};
- plains.grassChanceForestRemap = {0.2, 0.22};
- plains.justGrassChanceRemap = {0.12, 0.2};
- plains.growTreesOn = BlockTypes::grassBlock;
- plains.growGrassOn = BlockTypes::grassBlock;
- plains.grassType = BlockTypes::grass;
- plains.waterType = BlockTypes::water;
- biomes.push_back(plains);
- }
- //dry desert 1
- {
- Biome b;
- b.name = "dryDesert";
- b.color = glm::vec3{202, 169, 90}/255.f;
- b.surfaceBlock = BlockTypes::sand;
- b.secondaryBlock = BlockTypes::sand_stone;
- b.forestTresshold = 0.55;
- b.jusGrassTresshold = 0.1;
- b.treeChanceRemap = {0.01, 0.1};
- b.grassChanceForestRemap = {0.01, 0.02};
- b.justGrassChanceRemap = {0.001, 0.01};
- b.growTreesOn = 0;
- b.growGrassOn = 0;
- b.grassType = BlockTypes::dead_bush;
- b.waterType = BlockTypes::sand;
- biomes.push_back(b);
- }
- //desert 2
- {
- Biome b;
- b.name = "desert";
- b.color = glm::vec3{212, 189, 99} / 255.f;
- b.surfaceBlock = BlockTypes::sand;
- b.secondaryBlock = BlockTypes::sand_stone;
- b.forestTresshold = 0.55;
- b.jusGrassTresshold = 0.3;
- b.treeChanceRemap = {0.01, 0.1};
- b.grassChanceForestRemap = {0.01, 0.02};
- b.justGrassChanceRemap = {0.001, 0.01};
- b.growTreesOn = 0;
- b.growGrassOn = BlockTypes::sand;
- b.grassType = BlockTypes::dead_bush;
- b.waterType = BlockTypes::water;
- biomes.push_back(b);
- }
- //plains 3
- {
- Biome plains;
- plains.name = "plains";
- plains.color = {0.3,0.9,0.35};
- plains.surfaceBlock = BlockTypes::grassBlock;
- plains.secondaryBlock = BlockTypes::dirt;
- plains.treeType = Biome::treeBirch;
- plains.forestTresshold = 0.75;
- plains.jusGrassTresshold = 0.2;
- plains.treeChanceRemap = {0.01, 0.05};
- plains.grassChanceForestRemap = {0.2, 0.22};
- plains.justGrassChanceRemap = {0.12, 0.2};
- plains.growTreesOn = BlockTypes::grassBlock;
- plains.growGrassOn = BlockTypes::grassBlock;
- plains.grassType = BlockTypes::rose;
- plains.waterType = BlockTypes::water;
- biomes.push_back(plains);
- }
- //oasis 4
- {
- Biome b;
- b.name = "oasis";
- b.color = glm::vec3{222, 102, 192} / 255.f;
- b.surfaceBlock = BlockTypes::grassBlock;
- b.secondaryBlock = BlockTypes::dirt;
- b.treeType = Biome::treePalm;
- b.forestTresshold = 0.3;
- b.jusGrassTresshold = 0.1;
- b.treeChanceRemap = {0.001, 0.01};
- b.grassChanceForestRemap = {0.01, 0.03};
- b.justGrassChanceRemap = {0.01, 0.02};
- b.growTreesOn = BlockTypes::grassBlock;
- b.growGrassOn = BlockTypes::grassBlock;
- b.grassType = BlockTypes::cactus_bud;
- b.waterType = BlockTypes::water;
- biomes.push_back(b);
- }
- //jungle 5
- {
- Biome b;
- b.name = "jungle";
- b.color = {0.2,0.7,0.3};
- b.surfaceBlock = BlockTypes::grassBlock;
- b.secondaryBlock = BlockTypes::dirt;
- b.treeType = Biome::treeJungle;
- b.forestTresshold = 0.3;
- b.jusGrassTresshold = 0.1;
- b.treeChanceRemap = {0.006, 0.07};
- b.grassChanceForestRemap = {0.2, 0.22};
- b.justGrassChanceRemap = {0.12, 0.2};
- b.growTreesOn = BlockTypes::grassBlock;
- b.growGrassOn = BlockTypes::grassBlock;
- b.grassType = BlockTypes::grass;
- b.waterType = BlockTypes::water;
- biomes.push_back(b);
- }
- //dryLand 6
- {
- Biome b;
- b.name = "dryLand";
- b.color = glm::vec3{84, 51, 23} / 255.f;
- b.surfaceBlock = BlockTypes::dirt;
- b.secondaryBlock = BlockTypes::dirt;
- b.forestTresshold = 0.3;
- b.jusGrassTresshold = 0.1;
- b.treeChanceRemap = {0.01, 0.1};
- b.grassChanceForestRemap = {0.2, 0.22};
- b.justGrassChanceRemap = {0.12, 0.2};
- b.growTreesOn = 0;
- b.growGrassOn = 0;
- b.grassType = 0;
- b.waterType = BlockTypes::water;
- biomes.push_back(b);
- }
- //rocks 7
- {
- Biome b;
- b.name = "rocks";
- b.color = glm::vec3{89, 89, 89} / 255.f;
- b.surfaceBlock = BlockTypes::stone;
- b.secondaryBlock = BlockTypes::stone;
- b.forestTresshold = 0.3;
- b.jusGrassTresshold = 0.1;
- b.treeChanceRemap = {0.01, 0.1};
- b.grassChanceForestRemap = {0.2, 0.22};
- b.justGrassChanceRemap = {0.12, 0.2};
- b.growTreesOn = 0;
- b.growGrassOn = 0;
- b.grassType = 0;
- b.waterType = BlockTypes::ice;
- biomes.push_back(b);
- }
- //snow 8
- {
- Biome b;
- b.name = "snow";
- b.color = glm::vec3{199, 199, 199} / 255.f;
- b.surfaceBlock = BlockTypes::snow_dirt;
- b.secondaryBlock = BlockTypes::dirt;
- b.treeType = Biome::treeSpruce;
- b.forestTresshold = 0.9;
- b.jusGrassTresshold = 0.3;
- b.treeChanceRemap = {0.01, 0.06};
- b.grassChanceForestRemap = {0.4, 0.6};
- b.justGrassChanceRemap = {0.12, 0.4};
- b.growTreesOn = BlockTypes::snow_dirt;
- b.growGrassOn = BlockTypes::snow_dirt;
- b.grassType = 0;
- b.waterType = BlockTypes::ice;
- biomes.push_back(b);
- }
- //taiga 9
- {
- Biome b;
- b.name = "taiga";
- b.color = glm::vec3{184, 201, 159} / 255.f;
- b.surfaceBlock = BlockTypes::snow_dirt;
- b.secondaryBlock = BlockTypes::dirt;
- b.treeType = Biome::treeSpruce;
- b.forestTresshold = 0.7;
- b.jusGrassTresshold = 0.3;
- b.treeChanceRemap = {0.02, 0.12};
- b.grassChanceForestRemap = {0.4, 0.6};
- b.justGrassChanceRemap = {0.12, 0.4};
- b.growTreesOn = BlockTypes::snow_dirt;
- b.growGrassOn = BlockTypes::snow_dirt;
- b.grassType = 0;
- b.waterType = BlockTypes::ice;
- biomes.push_back(b);
- }
- {
- BiomeRange cold;
- cold.tresshold = 0;
- cold.ids.push_back(7);
- cold.ids.push_back(8);
- cold.ids.push_back(9);
- picker.temperature.push_back(cold);
- BiomeRange medium;
- medium.tresshold = 0.29;
- medium.ids.push_back(6);
- medium.ids.push_back(3);
- medium.ids.push_back(0);
- picker.temperature.push_back(medium);
- BiomeRange warm;
- warm.tresshold = 0.59;
- warm.ids.push_back(1);
- warm.ids.push_back(2);
- warm.ids.push_back(5);
- picker.temperature.push_back(warm);
- BiomeRange veryWarm;
- warm.tresshold = 0.9;
- warm.ids.push_back(4);
- warm.ids.push_back(1);
- warm.ids.push_back(2);
- warm.ids.push_back(5);
- picker.temperature.push_back(warm);
- }
- {
- BiomeRange dry;
- dry.tresshold = 0;
- dry.ids.push_back(7);
- dry.ids.push_back(6);
- dry.ids.push_back(1);
- picker.humidity.push_back(dry);
- BiomeRange medium;
- medium.tresshold = 0.29;
- medium.ids.push_back(8);
- medium.ids.push_back(3);
- medium.ids.push_back(2);
- picker.humidity.push_back(medium);
- BiomeRange mediumOasis;
- mediumOasis.tresshold = 0.51;
- mediumOasis.ids.push_back(4);
- mediumOasis.ids.push_back(8);
- mediumOasis.ids.push_back(3);
- mediumOasis.ids.push_back(2);
- picker.humidity.push_back(mediumOasis);
- BiomeRange high;
- high.tresshold = 0.61;
- high.ids.push_back(5);
- high.ids.push_back(0);
- high.ids.push_back(9);
- picker.humidity.push_back(high);
- }
- return true;
- }
- Biome *BiomesManager::determineBiome(float t, float h)
- {
- return &this->biomes[determineBiomeIndex(t, h)];
- }
- int BiomesManager::determineBiomeIndex(float t, float h)
- {
- //return &biomes[2];
- std::vector<int> biomes;
- biomes.reserve(5);
- size_t size = picker.temperature.size();
- for (int i = size - 1; i >= 0; i--)
- {
- if (t >= picker.temperature[i].tresshold)
- {
- for (auto b : picker.temperature[i].ids)
- {
- biomes.push_back(b);
- }
- break;
- }
- }
- size = picker.humidity.size();
- for (int i = size - 1; i >= 0; i--)
- {
- if (h >= picker.humidity[i].tresshold)
- {
- for (auto b : picker.humidity[i].ids)
- {
- for (auto id : biomes)
- {
- if (id == b)
- {
- return id;
- }
- }
- }
- }
- }
- assert(0);
- return -1;
- }
|