Пример #1
0
        /// <summary>
        /// Sets a personal relationship trait to another faction.
        /// </summary>
        /// <param name="factionID">Faction ID.</param>
        /// <param name="traitID">Trait ID.</param>
        /// <param name="value">Value.</param>
        /// <param name="numTraits">Size of the traits list. Needed if this method has to create a new relationship traits list.</param>
        public void SetPersonalRelationshipTrait(int factionID, int traitID, float value, int numTraits)
        {
            Relationship relationship;

            if (FindPersonalRelationship(factionID, out relationship))
            {
                relationship.SetTrait(traitID, value);
            }
            else
            {
                var newRelationship = Relationship.GetNew(factionID, new float[numTraits]);
                newRelationship.SetTrait(traitID, value);
                relationships.Add(newRelationship);
            }
        }
Пример #2
0
        /// <summary>
        /// Removes a direction parent from a faction.
        /// </summary>
        /// <param name="factionID">Faction ID.</param>
        /// <param name="parentID">Parent ID.</param>
        /// <param name="inheritRelationships">If set to <c>true</c> inherit any of the parents' relationships for which the faction doesn't already have a personal relationship.</param>
        public void RemoveFactionParent(int factionID, int parentID, bool inheritRelationships)
        {
            var faction = GetFaction(factionID);
            var parent  = GetFaction(parentID);

            if (faction == null || parent == null || !faction.HasDirectParent(parentID))
            {
                return;
            }
            faction.RemoveDirectParent(parentID);
            if (inheritRelationships)
            {
                for (int r = 0; r < parent.relationships.Count; r++)
                {
                    var relationship = parent.relationships[r];
                    if (!faction.HasPersonalRelationship(relationship.factionID))
                    {
                        faction.relationships.Add(Relationship.GetNew(relationship.factionID, (float[])relationship.traits.Clone()));
                    }
                }
            }
        }
Пример #3
0
        public void DeserializeFromString(string s)
        {
            if (string.IsNullOrEmpty(s) || factionDatabase == null)
            {
                return;
            }

            var traitCount = factionDatabase.relationshipTraitDefinitions.Length;
            var data       = new Queue <string>(s.Split(','));

            if (data.Count < 1)
            {
                return;
            }

            // Get faction count:
            var factionCount = SafeConvert.ToInt(data.Dequeue());

            for (int f = 0; f < Mathf.Min(factionCount, factionDatabase.factions.Length); f++)
            {
                var faction = factionDatabase.factions[f];

                // Get faction ID and name:
                faction.id   = SafeConvert.ToInt(data.Dequeue());
                faction.name = SafeConvert.FromSerializedElement(data.Dequeue());

                // Get faction personality trait values:
                for (int p = 0; p < faction.traits.Length; p++)
                {
                    faction.traits[p] = SafeConvert.ToFloat(data.Dequeue());
                }

                // Get faction parents:
                var parents     = new List <int>();
                var parentCount = SafeConvert.ToInt(data.Dequeue());
                for (int p = 0; p < parentCount; p++)
                {
                    parents.Add(SafeConvert.ToInt(data.Dequeue()));
                }
                faction.parents = parents.ToArray();

                // Release faction's old relationships:
                for (int r = 0; r < faction.relationships.Count; r++)
                {
                    var relationship = faction.relationships[r];
                    Relationship.Release(relationship);
                }
                faction.relationships.Clear();

                // Get faction's relationships:
                var relationshipCount = SafeConvert.ToInt(data.Dequeue());
                for (int r = 0; r < relationshipCount; r++)
                {
                    var id          = SafeConvert.ToInt(data.Dequeue());
                    var inheritable = (SafeConvert.ToInt(data.Dequeue()) == 1);
                    var traits      = new float[traitCount];
                    for (int i = 0; i < traitCount; i++)
                    {
                        traits[i] = SafeConvert.ToFloat(data.Dequeue());
                    }
                    var relationship = Relationship.GetNew(id, inheritable, traits);
                    faction.relationships.Add(relationship);
                }
            }
        }