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