Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        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);
        }
Exemplo n.º 3
0
        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);
        }
Exemplo n.º 4
0
 public void SetAffinity(string aspect, int affinity)
 {
     _affinities.SetAffinity(aspect, affinity);
 }