Exemplo n.º 1
0
        /// <summary>
        /// Sets a faction's traits to its inherited parents' traits.
        /// </summary>
        /// <param name="factionID">Faction name.</param>
        /// <param name="inheritanceType">How to handle inheritance.</param>
        public void InheritTraitsFromParents(int factionID, FactionInheritanceType inheritanceType)
        {
            var faction = GetFaction(factionID);

            if (faction == null || faction.parents.Length < 1)
            {
                return;
            }
            faction.traits = GetInheritedTraits(factionID, inheritanceType, new List <int>());
        }
Exemplo n.º 2
0
        private float[] GetInheritedTraits(int factionID, FactionInheritanceType inheritanceType, List <int> visited)
        {
            if (visited.Contains(factionID))
            {
                return(null);
            }
            visited.Add(factionID);
            var faction = GetFaction(factionID);

            if (faction == null)
            {
                return(null);
            }
            if (faction.parents.Length < 1)
            {
                return(faction.traits);
            }
            var total = Traits.Allocate(faction.traits.Length, true);
            int count = 0;

            for (int p = 0; p < faction.parents.Length; p++)
            {
                //--- No longer check ancestors; only check parents.
                //--- Removed: var parentTraits = GetInheritedTraits(faction.parents[p], inheritanceType, visited);
                var parent = GetFaction(faction.parents[p]);
                if (parent != null && parent.traits != null)
                {
                    count++;
                    for (int t = 0; t < parent.traits.Length; t++)
                    {
                        total[t] += parent.traits[t];
                    }
                }
            }
            if (count == 0)
            {
                return(faction.traits);
            }
            for (int t = 0; t < faction.traits.Length; t++)
            {
                total[t] = Mathf.Clamp(((inheritanceType == FactionInheritanceType.Sum) ? total[t] : total[t] / count), -100, 100);
            }

            return(total);
        }
Exemplo n.º 3
0
 /// <summary>
 /// Sets a faction's traits to its inherited parents' traits.
 /// </summary>
 /// <param name="factionName">Faction name.</param>
 /// <param name="inheritanceType">How to handle inheritance.</param>
 public void InheritTraitsFromParents(string factionName, FactionInheritanceType inheritanceType)
 {
     InheritTraitsFromParents(GetFactionID(factionName));
 }