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