public static VegetationAnimation CreateFromElement(XElement element) { VegetationAnimation va = new VegetationAnimation(); foreach (XAttribute attribute in element.Attributes()) { switch (attribute.Name.LocalName) { case "Enabled": va.bEnabled = (element.Attribute("Enabled").Value.ToLower() == "true"); break; case "BranchAmplitude": va.branchAmplitude = element.Attribute("BranchAmplitude").Value.ToSingle(); break; case "DetailAmplitude": va.detailAmplitude = element.Attribute("DetailAmplitude").Value.ToSingle(); break; case "DetailFrequency": va.detailFrequency = element.Attribute("DetailFrequency").Value.ToSingle(); break; case "BendScale": va.bendScale = element.Attribute("BendScale").Value.ToSingle(); break; default: throw new NotImplementedException(string.Format("Unknown Attribute: {0}", attribute.Name.LocalName)); } } return va; }
public MT2(XElement xml) : this() { this.xml = xml; var dblSided = xml.Descendants("DoubleSided").FirstOrDefault(); var castsShads = xml.Descendants("CastsShadows").FirstOrDefault(); var recShads = xml.Descendants("ReceivesShadows").FirstOrDefault(); var fog = xml.Descendants("FogEnabled").FirstOrDefault(); var trans = xml.Descendants("Translucent").FirstOrDefault(); var walk = xml.Descendants("Walkable").FirstOrDefault(); var panic = xml.Descendants("Panickable").FirstOrDefault(); var sit = xml.Descendants("Sitable").FirstOrDefault(); var pick = xml.Descendants("Unpickable").FirstOrDefault(); var needWSVN = xml.Descendants("NeedsWorldSpaceVertexNormal").FirstOrDefault(); var needWEP = xml.Descendants("NeedsWorldEyePos").FirstOrDefault(); var needWVP = xml.Descendants("NeedsWorldVertexPos").FirstOrDefault(); var needWLD = xml.Descendants("NeedsWorldLightDir").FirstOrDefault(); var needLSVN = xml.Descendants("NeedsLightingSpaceVertexNormal").FirstOrDefault(); var needVC = xml.Descendants("NeedsVertexColour").FirstOrDefault(); var needLCM = xml.Descendants("NeedsLocalCubeMap").FirstOrDefault(); var needSOC = xml.Descendants("NeedsSeperateObjectColour").FirstOrDefault(); if (dblSided != null) { bDoubleSided = (dblSided.Attribute("Value").Value.ToLower() == "true" ? Troolean.True : Troolean.False); } if (castsShads != null) { bCastsShadows = (castsShads.Attribute("Value").Value.ToLower() == "true" ? Troolean.True : Troolean.False); } if (recShads != null) { bReceivesShadows = (recShads.Attribute("Value").Value.ToLower() == "true" ? Troolean.True : Troolean.False); } if (fog != null) { bFogEnabled = (fog.Attribute("Value").Value.ToLower() == "true" ? Troolean.True : Troolean.False); } if (trans != null) { bTranslucent = (trans.Attribute("Value").Value.ToLower() == "true" ? Troolean.True : Troolean.False); } if (walk != null) { bWalkable = (walk.Attribute("Value").Value.ToLower() == "true" ? Troolean.True : Troolean.False); } if (panic != null) { bPanickable = (panic.Attribute("Value").Value.ToLower() == "true" ? Troolean.True : Troolean.False); } if (sit != null) { bSitable = (sit.Attribute("Value").Value.ToLower() == "true" ? Troolean.True : Troolean.False); } if (pick != null) { bUnpickable = (pick.Attribute("Value").Value.ToLower() == "true" ? Troolean.True : Troolean.False); } if (needWSVN != null) { bNeedsWorldSpaceVertexNormal = (needWSVN.Attribute("Value").Value.ToLower() == "true" ? Troolean.True : Troolean.False); } if (needWEP != null) { bNeedsWorldEyePos = (needWEP.Attribute("Value").Value.ToLower() == "true" ? Troolean.True : Troolean.False); } if (needWVP != null) { bNeedsWorldVertexPos = (needWVP.Attribute("Value").Value.ToLower() == "true" ? Troolean.True : Troolean.False); } if (needWLD != null) { bNeedsWorldLightDir = (needWLD.Attribute("Value").Value.ToLower() == "true" ? Troolean.True : Troolean.False); } if (needLSVN != null) { bNeedsLightingSpaceVertexNormal = (needLSVN.Attribute("Value").Value.ToLower() == "true" ? Troolean.True : Troolean.False); } if (needVC != null) { bNeedsVertexColour = (needVC.Attribute("Value").Value.ToLower() == "true" ? Troolean.True : Troolean.False); } if (needLCM != null) { bNeedsLocalCubeMap = (needLCM.Attribute("Value").Value.ToLower() == "true" ? Troolean.True : Troolean.False); } if (needSOC != null) { bNeedsSeperateObjectColour = (needSOC.Attribute("Value").Value.ToLower() == "true" ? Troolean.True : Troolean.False); } var mult = xml.Descendants("Constant").Where(e => e.Attribute("Alias").Value == "Multiplier").FirstOrDefault(); var emml = xml.Descendants("Constant").Where(e => e.Attribute("Alias").Value == "EmissiveLight").FirstOrDefault(); var emmf = xml.Descendants("Constant").Where(e => e.Attribute("Alias").Value == "EmissiveFactor").FirstOrDefault(); var emmc = xml.Descendants("Constant").Where(e => e.Attribute("Alias").Value == "Emissive_Colour").FirstOrDefault(); var refm = xml.Descendants("Constant").Where(e => e.Attribute("Alias").Value == "ReflectionMultiplier").FirstOrDefault(); var fres = xml.Descendants("Constant").Where(e => e.Attribute("Alias").Value == "Fresnel_R0").FirstOrDefault(); var refb = xml.Descendants("Constant").Where(e => e.Attribute("Alias").Value == "ReflectionBluryness").FirstOrDefault(); var alph = xml.Descendants("Constant").Where(e => e.Attribute("Alias").Value == "AlphaCutOff").FirstOrDefault(); if (mult != null) { multiplier = ReadConstant(mult); } if (emml != null) { emissiveLight = ReadConstant(emml); } if (emmf != null) { emissiveFactor = ReadConstant(emmf); } if (emmc != null) { emissiveColour = ReadConstant(emmc); } if (refm != null) { reflectionMultiplier = ReadConstant(refm); } if (fres != null) { fresnelR0 = ReadConstant(fres); } if (refb != null) { reflectionBluryness = ReadConstant(refb); } if (alph != null) { alphaCutOff = ReadConstant(alph); } var vegetation = xml.Descendants("VegetationAnimation").FirstOrDefault(); if (vegetation != null) { vegetationAnimation = VegetationAnimation.CreateFromElement(vegetation); } foreach (var textureCoordSource in xml.Descendants("TextureCoordSource")) { textureCoordSources.Add(TextureCoordSource.CreateFromElement(textureCoordSource)); } foreach (var sampler in xml.Descendants("Sampler")) { samplers.Add(Sampler.CreateFromElement(sampler)); } // Rotator2D var sub = xml.Descendants("Substance").FirstOrDefault(); if (sub != null) { substance = sub.Attribute("Name").Value; } }