UPD: Consider ResourceTypes
This commit is contained in:
parent
762550fccf
commit
e7094dd7de
@ -3,3 +3,7 @@
|
||||
//
|
||||
|
||||
#include "Random.h"
|
||||
|
||||
std::mt19937 Random::getEngine() {
|
||||
return gen;
|
||||
}
|
||||
|
||||
@ -29,6 +29,8 @@ public:
|
||||
return dist(gen);
|
||||
}
|
||||
|
||||
std::mt19937 getEngine();
|
||||
|
||||
private:
|
||||
std::mt19937 gen;
|
||||
};
|
||||
|
||||
@ -78,21 +78,42 @@ void MapGenerator::assignOwners(EntityManager &entityManager, int numPlayers) {
|
||||
Random random;
|
||||
|
||||
|
||||
std::vector<TileInfo> woodTiles;
|
||||
std::vector<TileInfo> stoneTiles;
|
||||
std::vector<TileInfo> noneTiles;
|
||||
std::vector<TileInfo> allTiles;
|
||||
for (EntityID id: entityManager.getAllEntities()) {
|
||||
if (auto tileComponent = entityManager.getComponent<TileGameplayComponent>(id)) {
|
||||
allTiles.push_back({tileComponent->q, tileComponent->r, id});
|
||||
switch (tileComponent->ressourceType) {
|
||||
case RessourceType::WOOD: woodTiles.push_back({tileComponent->q, tileComponent->r, id}); break;
|
||||
case RessourceType::STONE: stoneTiles.push_back({tileComponent->q, tileComponent->r, id}); break;
|
||||
default: noneTiles.push_back({tileComponent->q, tileComponent->r, id}); break;
|
||||
}
|
||||
}
|
||||
}
|
||||
int maxTilesPerPlayer = static_cast<int>(allTiles.size() / numPlayers * (1.f / numPlayers)); // z.B. 60% der Map
|
||||
|
||||
|
||||
int maxTilesPerPlayer = static_cast<int>((woodTiles.size() + stoneTiles.size() + noneTiles.size()) / numPlayers * (1.f / numPlayers)); // z.B. 60% der Map
|
||||
std::unordered_set<EntityID> assigned;
|
||||
|
||||
std::shuffle(woodTiles.begin(), woodTiles.end(), random.getEngine());
|
||||
std::shuffle(stoneTiles.begin(), stoneTiles.end(), random.getEngine());
|
||||
|
||||
//1 Seets pro Spieler
|
||||
std::vector<EntityID> seeds;
|
||||
for (int player = 0; player < numPlayers; ++player) {
|
||||
EntityID seed = allTiles[random.randomInt(0, static_cast<int>(allTiles.size()))].id;
|
||||
seeds.push_back(seed);
|
||||
entityManager.addComponent(seed, std::make_shared<OwnerComponent>(player-1));
|
||||
if (!woodTiles.empty()) {
|
||||
TileInfo woodSeed = woodTiles.back(); woodTiles.pop_back();
|
||||
entityManager.addComponent(woodSeed.id, std::make_shared<OwnerComponent>(player));
|
||||
seeds.push_back(woodSeed.id);
|
||||
}
|
||||
|
||||
if (!stoneTiles.empty()) {
|
||||
TileInfo stoneSeed = stoneTiles.back(); stoneTiles.pop_back();
|
||||
entityManager.addComponent(stoneSeed.id, std::make_shared<OwnerComponent>(player));
|
||||
seeds.push_back(stoneSeed.id);
|
||||
}
|
||||
}
|
||||
|
||||
// 2. Expansion
|
||||
@ -100,8 +121,6 @@ void MapGenerator::assignOwners(EntityManager &entityManager, int numPlayers) {
|
||||
while (changed) {
|
||||
changed = false;
|
||||
for (PlayerID player = 0; player < static_cast<uint32_t>(numPlayers); ++player) {
|
||||
|
||||
|
||||
// Finde alle Tiles des Spielers
|
||||
int ownedCount = 0;
|
||||
for (TileInfo& tile : allTiles) {
|
||||
@ -137,7 +156,6 @@ void MapGenerator::assignOwners(EntityManager &entityManager, int numPlayers) {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
bool MapGenerator::areHexNeighbors(int q1, int r1, int q2, int r2) {
|
||||
|
||||
Loading…
Reference in New Issue
Block a user