Example #1
0
 public void CopyTo(QuestNode node)
 {
     if (node == null)
     {
         Debug.LogWarning("Quest Machine: QuestNodeProxy.CopyTo destination is null.");
         return;
     }
     node.id             = new StringField(id);
     node.internalName   = new StringField(intName);
     node.nodeType       = type;
     node.isOptional     = optional;
     node.speaker        = new StringField(speaker);
     node.stateInfoList  = QuestStateInfoProxy.CreateList(states);
     node.conditionSet   = conds.CreateConditionSet();
     node.tagDictionary  = new TagDictionary(tags);
     node.childIndexList = new List <int>(childIdx);
     if (QuestProxy.includeCanvasRect && !string.IsNullOrEmpty(r))
     {
         var fields = r.Split(';');
         if (fields.Length == 4)
         {
             node.canvasRect = new Rect(SafeConvert.ToFloat(fields[0]), SafeConvert.ToFloat(fields[1]), SafeConvert.ToFloat(fields[2]), SafeConvert.ToFloat(fields[3]));
         }
     }
 }
        private float[] GetPersonalityTraits(List <string> row)
        {
            var traits = new float[db.personalityTraitDefinitions.Length];

            for (int i = 0; i < db.personalityTraitDefinitions.Length; i++)
            {
                traits[i] = SafeConvert.ToFloat(GetColumn(row, prefs.firstPersonalityTraitColumn + i));
            }
            return(traits);
        }
Example #3
0
 /// <summary>
 /// Converts a string to a float, culture invariant (i.e., uses '.' for decimal point).
 /// </summary>
 /// <returns>
 /// The float, or <c>0</c> if the string can't be parsed to a float.
 /// </returns>
 /// <param name='s'>
 /// The string.
 /// </param>
 public static float StringToFloat(string s)
 {
     return(SafeConvert.ToFloat(s));
 }
        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);
                }
            }
        }
Example #5
0
        /// <summary>
        /// Deserializes the faction member's data from a string. This string must
        /// have been generated by SerializeToString. This method replaces the
        /// faction member's current data with the serialized data in the strnig.
        /// </summary>
        /// <param name="s">Seralized data.</param>
        public void DeserializeFromString(string s)
        {
            if (factionManager == null || factionManager.factionDatabase == null)
            {
                return;
            }
            var traitCount = factionManager.factionDatabase.personalityTraitDefinitions.Length;

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

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

            // Get faction ID:
            var newFactionID = SafeConvert.ToInt(data.Dequeue());

            if (newFactionID != factionID)
            {
                SwitchFaction(newFactionID);
            }

            // Get PAD:
            pad.happiness = SafeConvert.ToFloat(data.Dequeue());
            pad.pleasure  = SafeConvert.ToFloat(data.Dequeue());
            pad.arousal   = SafeConvert.ToFloat(data.Dequeue());
            pad.dominance = SafeConvert.ToFloat(data.Dequeue());

            try
            {
                StopMemoryCleanup();

                // Release old memories:
                shortTermMemory.Clear();
                for (int m = 0; m < longTermMemory.Count; m++)
                {
                    var mem = longTermMemory[m];
                    Rumor.Release(mem);
                }
                longTermMemory.Clear();
                shortTermMemory.Clear();

                // Get memories:
                var memCount = SafeConvert.ToInt(data.Dequeue());
                for (int m = 0; m < memCount; m++)
                {
                    var mem = Rumor.GetNew();
                    mem.deedGuid        = new System.Guid(data.Dequeue());
                    mem.tag             = data.Dequeue();
                    mem.actorFactionID  = SafeConvert.ToInt(data.Dequeue());
                    mem.targetFactionID = SafeConvert.ToInt(data.Dequeue());
                    mem.impact          = SafeConvert.ToFloat(data.Dequeue());
                    mem.traits          = new float[traitCount];
                    for (int t = 0; t < traitCount; t++)
                    {
                        mem.traits[t] = SafeConvert.ToFloat(data.Dequeue());
                    }
                    mem.count      = SafeConvert.ToInt(data.Dequeue());
                    mem.confidence = SafeConvert.ToFloat(data.Dequeue());
                    mem.pleasure   = SafeConvert.ToFloat(data.Dequeue());
                    mem.arousal    = SafeConvert.ToFloat(data.Dequeue());
                    mem.dominance  = SafeConvert.ToFloat(data.Dequeue());
                    mem.memorable  = true;
                    var shortTermLeft = SafeConvert.ToFloat(data.Dequeue());
                    var longTermLeft  = SafeConvert.ToFloat(data.Dequeue());
                    mem.shortTermExpiration = (shortTermLeft <= 0) ? 0 : GameTime.time + shortTermLeft;
                    mem.longTermExpiration  = GameTime.time + longTermLeft;
                    longTermMemory.Add(mem);
                    if (shortTermLeft > 0)
                    {
                        shortTermMemory.Add(mem);
                    }
                }
            }
            finally
            {
                StartMemoryCleanup();
            }
        }
        private void Import()
        {
            try
            {
                // PersonalityTraits.csv:
                EditorUtility.DisplayProgressBar("Importing Faction Database From CSV", "Importing personality trait definitions...", 0);
                var csv = ReadCSVMinusBlankLastLine(prefs.folder + "/PersonalityTraits.csv");
                if (csv.Count > 1)
                {
                    csv.RemoveAt(0); // Remove heading.
                    db.personalityTraitDefinitions = new TraitDefinition[csv.Count];
                    for (int i = 0; i < csv.Count; i++)
                    {
                        var row = csv[i];
                        db.personalityTraitDefinitions[i] = new TraitDefinition(row[0], row[1]);
                    }
                }

                // RelationshipTraits.csv:
                EditorUtility.DisplayProgressBar("Importing Faction Database From CSV", "Importing relationship trait definitions...", 40);
                csv = ReadCSVMinusBlankLastLine(prefs.folder + "/RelationshipTraits.csv");
                if (csv.Count > 1)
                {
                    csv.RemoveAt(0); // Remove heading.
                    db.relationshipTraitDefinitions = new TraitDefinition[csv.Count];
                    for (int i = 0; i < csv.Count; i++)
                    {
                        var row = csv[i];
                        db.relationshipTraitDefinitions[i] = new TraitDefinition(row[0], row[1]);
                    }
                }

                // Factions.csv:
                EditorUtility.DisplayProgressBar("Importing Faction Database From CSV", "Importing factions...", 60);
                csv = ReadCSVMinusBlankLastLine(prefs.folder + "/Factions.csv");
                if (csv.Count > 1)
                {
                    csv.RemoveAt(0); // Remove heading row.
                    var presetList  = new List <Preset>();
                    var factionList = new List <Faction>();
                    // Get all except parents:
                    for (int i = 0; i < csv.Count; i++)
                    {
                        var row = csv[i];
                        if (row[0].StartsWith("GDE_"))
                        {
                            continue;                            // Skip special Game Data Editor (GDE) rows.
                        }
                        if (prefs.hasPresets && GetColumn(row, prefs.presetColumn) == "1")
                        {
                            var preset = new Preset();
                            preset.name        = GetColumn(row, prefs.nameColumn);
                            preset.description = GetColumn(row, prefs.descriptionColumn);
                            preset.traits      = GetPersonalityTraits(row);
                            presetList.Add(preset);
                        }
                        else
                        {
                            var faction = new Faction();
                            faction.id                  = prefs.autoID ? factionList.Count : SafeConvert.ToInt(GetColumn(row, prefs.idColumn));
                            faction.name                = GetColumn(row, prefs.nameColumn);
                            faction.description         = GetColumn(row, prefs.descriptionColumn);
                            faction.color               = SafeConvert.ToInt(GetColumn(row, prefs.colorColumn));
                            faction.percentJudgeParents = SafeConvert.ToFloat(GetColumn(row, prefs.percentJudgeParentsColumn));
                            faction.traits              = GetPersonalityTraits(row);
                            factionList.Add(faction);
                        }
                    }
                    // Then do parents:
                    int factionIndex = 0;
                    for (int i = 0; i < csv.Count; i++)
                    {
                        var row = csv[i];
                        if (row[0].StartsWith("GDE_"))
                        {
                            continue;                            // Skip special Game Data Editor (GDE) rows.
                        }
                        if (!(prefs.hasPresets && GetColumn(row, prefs.presetColumn) == "1"))
                        {
                            var faction = factionList[factionIndex++];
                            faction.parents = GetParents(row, factionList);
                        }
                    }
                    db.presets  = presetList.ToArray();
                    db.factions = factionList.ToArray();
                }

                // Relationships.csv:
                EditorUtility.DisplayProgressBar("Importing Faction Database From CSV", "Importing relationships...", 60);
                for (int i = 0; i < db.relationshipTraitDefinitions.Length; i++)
                {
                    csv = ReadCSVMinusBlankLastLine(prefs.folder + "/Relationships_" + GetValidFilespec(db.relationshipTraitDefinitions[i].name) + ".csv");
                    if (csv.Count > 1)
                    {
                        for (int j = 1; j < csv.Count; j++) // Skip heading row.
                        {
                            var row = csv[j];
                            if (row.Count == 0)
                            {
                                continue;
                            }
                            var judgeName = row[0];// db.GetFactionID(row[0]);
                            for (int k = 1; k < Mathf.Min(db.factions.Length, row.Count); k++)
                            {
                                var   subjectName = db.factions[k - 1].name;
                                float value;
                                if (float.TryParse(row[k], out value))
                                {
                                    db.SetPersonalRelationshipTrait(judgeName, subjectName, i, value);
                                }
                            }
                        }
                    }
                }
            }
            finally
            {
                EditorUtility.ClearProgressBar();
                EditorUtility.SetDirty(db);
            }
            Debug.Log("Exported " + db.name + " to CSV files in " + prefs.folder + ".", db);
        }