public CollisionVolume(CollisionVolume src) { Name = src.Name; Support = src.Support; End = src.End; Position = src.Position; Rot = src.Rot; Scale = src.Scale; }
private void Load(Stream s) { var doc = new XmlDocument { XmlResolver = null }; doc.Load(s); var rootelem = doc.GetElementsByTagName("linden_skeleton")[0] as XmlElement; if (rootelem == null) { throw new InvalidDataException(); } var stack = new List <KeyValuePair <XmlElement, BoneInfo> >(); foreach (XmlElement elem in rootelem.ChildNodes.OfType <XmlElement>()) { if (elem.Name == "bone") { var info = new BoneInfo(elem); BonesRef.Add(info.Name, info); foreach (string alias in info.Aliases) { BonesRef.Add(alias, info); } Bones.Add(info); stack.Add(new KeyValuePair <XmlElement, BoneInfo>(elem, info)); } } while (stack.Count != 0) { KeyValuePair <XmlElement, BoneInfo> kvp = stack[0]; stack.RemoveAt(0); foreach (XmlElement elem in kvp.Key.ChildNodes.OfType <XmlElement>()) { if (elem.Name == "bone") { var info = new BoneInfo(elem); kvp.Value.Children.Add(info); BonesRef.Add(info.Name, info); foreach (string alias in info.Aliases) { BonesRef.Add(alias, info); } stack.Add(new KeyValuePair <XmlElement, BoneInfo>(elem, info)); } else if (elem.Name == "collision_volume") { var colvol = new CollisionVolume(elem); kvp.Value.CollisionVolumes.Add(colvol); } } } }