private void LoadEmotionsFromXMLNode(XmlNode parentNode, ref Dictionary<string, Emot_Emotion> emotionDict) { foreach (XmlNode xmlEmotion in parentNode.ChildNodes) { var emotion = new Emot_Emotion(xmlEmotion.Attributes["Name"].Value); var xmlAnimMappings = xmlEmotion.ChildNodes; foreach (XmlNode xmlAnimMapping in xmlAnimMappings) emotion.AnimMappings.Add(xmlAnimMapping.Attributes["Name"].Value, float.Parse(xmlAnimMapping.Attributes["Value"].Value)); emotionDict.Add(emotion.Name, emotion); } }
public void NormalisePersonality(string emotionToPreserveName) { if (!Emotions.ContainsKey(emotionToPreserveName)) return; Emot_Emotion emotionToScale = null; List<Emot_Emotion> allOtherEmotions = new List<Emot_Emotion>(); foreach (var emotion in Emotions) { if (emotion.Key == emotionToPreserveName) emotionToScale = emotion.Value; else allOtherEmotions.Add(emotion.Value); } // Find amount to change. float targetRemainder = 1f - emotionToScale.PersonalityValue; float remainder = 0f; foreach (var emotion in allOtherEmotions) remainder += emotion.PersonalityValue; float delta = targetRemainder - remainder; // Scale values. foreach (var emotion in allOtherEmotions) { if (targetRemainder <= float.Epsilon) emotion.PersonalityValue = 0f; else { float ratio = 0f; if (remainder <= float.Epsilon) ratio = 1f / allOtherEmotions.Count; else ratio = emotion.PersonalityValue / remainder; emotion.PersonalityValue += delta * ratio; } } }