private static LXFMLDoc.BrickGroup FindGroup(LXFMLDoc lxfml, LXFMLDoc.Brick brick) { foreach (var group in lxfml.groups) { if (group.brickRefs.Contains(brick.refId)) { return(group); } } return(null); }
private static bool FindBrickInGroups(LXFMLDoc.Brick brick, LXFMLDoc.BrickGroup[] groups) { foreach (var group in groups) { if (Array.IndexOf(group.brickRefs, brick.refId) >= 0) { return(true); } if (group.children != null && FindBrickInGroups(brick, group.children)) { return(true); } } return(false); }
public static LXFMLDoc.Brick PopulateBrick(XmlNode brickNode) { var brick = new LXFMLDoc.Brick(); brick.designId = brickNode.Attributes["designID"].Value.Split(';')[0]; // TODO: Use version. brick.refId = Convert.ToInt32(brickNode.Attributes["refID"].Value); if (brickNode.Attributes["uuid"] != null) { brick.uuid = brickNode.Attributes["uuid"].Value; } string mats = ""; foreach (System.Xml.XmlNode item in brickNode.SelectNodes("Part")) { mats += item.Attributes["materials"].Value + ","; } mats = mats.Remove(mats.Length - 1); LXFMLDoc.Brick.Part[] parts = new LXFMLDoc.Brick.Part[brickNode.SelectNodes("Part").Count]; for (int i = 0; i < brickNode.SelectNodes("Part").Count; i++) { var partNode = brickNode.SelectNodes("Part")[i]; parts[i] = new LXFMLDoc.Brick.Part(); parts[i].refId = Convert.ToInt32(partNode.Attributes["refID"].Value); parts[i].brickDesignId = brick.designId; parts[i].partDesignId = partNode.Attributes["designID"].Value.Split(';')[0]; // TODO: Use version. parts[i].materials = ParseUtils.StringOfMaterialToMaterialArray(partNode.Attributes["materials"].Value); // TODO: Use shader id. var decoAttrib = partNode.Attributes["decoration"]; if (decoAttrib != null) { parts[i].decorations = ParseUtils.StringOfDecorationToDecorationArray(decoAttrib.Value); } var boneNodes = partNode.SelectNodes("Bone"); parts[i].bones = new LXFMLDoc.Brick.Part.Bone[boneNodes.Count]; foreach (XmlNode boneNode in boneNodes) { var bone = new LXFMLDoc.Brick.Part.Bone(); bone.refId = Convert.ToInt32(boneNode.Attributes["refID"].Value); var transformation = new Matrix4x4(); var mArr = ParseUtils.StringToFloatArray(boneNode.Attributes["transformation"].Value); for (var j = 0; j < 4; ++j) { transformation.SetRow(j, new Vector4(mArr[j * 3], mArr[j * 3 + 1], mArr[j * 3 + 2], 0)); } bone.position = GetPosition(transformation); bone.rotation = GetRotation(transformation); parts[i].bones[0] = bone; } } brick.parts = parts; return(brick); }