public AffinityMap CombineWith(AffinityMap other) { AffinityMap combined = new AffinityMap(_rand); foreach (var aspect in _affinities.Keys) { int otherAffinity = other.GetAffinity(aspect); if (otherAffinity != 0) { int combinedVal = CombineAffinities(GetAffinity(aspect), other.GetAffinity(aspect)); if (combinedVal != 0) { combined.SetAffinity(aspect, combinedVal); } } } return(combined); }
public AffinityMap GetAffinitiesForLandmass(Landmass landmass) { if (!Landmasses.Contains(landmass)) { throw new KeyNotFoundException("Tried to get affinities for a landmass that is not in this HexMap."); } if (landmass.Affinities == null) { var totalAffinityScore = new Dictionary <string, int>(); foreach (Coords coords in landmass.Hexes) { Hex hex = GetHexAt(coords); AffinityMap affinities = hex.Affinities; foreach (var aspect in affinities.AspectList) { if (!totalAffinityScore.ContainsKey(aspect)) { totalAffinityScore[aspect] = 0; } totalAffinityScore[aspect] += affinities.GetAffinity(aspect); } } AffinityMap newAffinityMap = new AffinityMap(_rand); foreach (var aspect in totalAffinityScore.Keys) { int score = totalAffinityScore[aspect]; int affinity = score / landmass.TotalHexes; // don't allow 0 here; just weak affinities if (affinity == 0) { affinity = (score > 0) ? 1 : -1; } newAffinityMap.SetAffinity(aspect, affinity); } landmass.Affinities = newAffinityMap; } return(landmass.Affinities); }
public AffinityMap FilterByPool(string pool) { if (!_aspectGlossary.HasPool(pool)) { return(new AffinityMap(this)); } var poolMembers = _aspectGlossary.GetPool(pool); var theseAspects = _affinities.Keys; var commonMembers = theseAspects.Intersect(poolMembers); AffinityMap newMap = new AffinityMap(_rand); foreach (var member in commonMembers) { newMap.SetAffinity(member, _affinities[member]); } return(newMap); }
public void SetAffinity(string aspect, int affinity) { _affinities.SetAffinity(aspect, affinity); }