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