public void GenerateRace() { if (_raceGen == null) { _raceGen = new RaceGen(); } if (_raceGen.IsEmpty()) { return; } Landmass mass = _world.Map.GetRandomLandmass(); AffinityMap massAffinity = _world.Map.GetAffinitiesForLandmass(mass); Race genRace = _raceGen.GenerateRace(massAffinity); Console.WriteLine("Rolled race: " + genRace); Console.WriteLine(genRace.Affinities); // arbitrarily low number to start with int highest = -50; // random coordinates as default Coords candidate = mass.RandomCoords(); int tick = 0; int tenPercent = mass.Count / 10; bool tenPercentMore = false; foreach (Coords coords in mass.CoordsFromRandomPoint()) { if (tick >= tenPercent) { break; } AffinityMap hexAffinities = _world.Map.GetAffinitiesForCoords(coords); int sim = genRace.Affinities.GetSimilarityTo(hexAffinities); if (sim > highest) { highest = sim; candidate = coords; } if (!tenPercentMore && highest > 0) { tenPercentMore = true; } if (tenPercentMore) { tick++; } } Console.WriteLine("Placing at : " + candidate); Console.WriteLine(_world.Map.GetAffinitiesForCoords(candidate)); Console.WriteLine("--> Final Score: " + highest); Console.WriteLine("------------------"); _world.PlaceRaceAt(genRace, candidate); }
private void PlaceFirstSegment() { while (_river == null) { Coords candidate = _landmass.RandomCoords(); if (!_world.Map.IsRiverAt(candidate)) { _river = new River(candidate); _allCoords.Add(candidate); } } }