Пример #1
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);
                }
            }
        }