//============================================================ // <T>加载配置信息。</T> // // @param config 配置信息 //============================================================ public void LoadConfig(FXmlNode xconfig) { _optionLoaded = xconfig.GetInteger("option_loaded", EDrFlag.Inherit); _optionSelect = xconfig.GetInteger("option_select", EDrFlag.Inherit); _optionGround = xconfig.GetInteger("option_ground", EDrFlag.Inherit); if (xconfig.Contains("option_merge")) { _optionMergeVertex = xconfig.GetInteger("option_merge"); } if (xconfig.Contains("option_merge_vertex")) { _optionMergeVertex = xconfig.GetInteger("option_merge_vertex"); } _optionMergeMaterial = xconfig.GetInteger("option_merge_material", EDrFlag.Inherit); _optionLightMap = xconfig.GetInteger("option_light_map", EDrFlag.Inherit); //............................................................ // 加载渲染列表 FXmlNode xrenderables = xconfig.Find("Renderables"); if (null != xrenderables) { _outline.InitializeMin(); foreach (FXmlNode xrenderable in xrenderables.Nodes) { if (xrenderable.IsName("Renderable")) { // 建立渲染对象 FDrTemplateRenderable renderable = new FDrTemplateRenderable(); renderable.Template = this; renderable.LoadConfig(xrenderable); if (null == _model) { _model = renderable.Model; } _outline.InnerMax(renderable.Outline); // 设置材质 FDrMaterialGroup material = renderable.Material; if (null == material) { RMoCore.TrackConsole.Write(this, "LoadConfig", "Material is not exists. (template={0}, geometry={1}, material={2})", _name, renderable.GeometryName, renderable.MaterialName); return; } if (!_materials.Contains(material)) { _materials.Push(material); } _renderables.Push(renderable); } } } //............................................................ // 加载引用列表 FXmlNode xreferences = xconfig.Find("References"); if (null != xreferences) { foreach (FXmlNode xreference in xreferences.Nodes) { if (xreference.IsName("Reference")) { FDrTemplateReference reference = new FDrTemplateReference(); reference.LoadConfig(xreference); _references.Push(reference); } } } //............................................................ // 加载动画列表 FXmlNode xanimation = xconfig.Find("Animation"); if (null != xanimation) { _animation.Model = _model; _animation.LoadConfig(xanimation); } //............................................................ // 材质集合排序 if (!_materials.IsEmpty) { _materials.Sort(_materials.First); } }