/// <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); } }
/// <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())); } } } }
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); } } }