コード例 #1
0
ファイル: CatModel.cs プロジェクト: LeonXJ/Catsland-XNA
 public void SetMaterialToTemplate(CatMaterialTemplate _materialTemplate)
 {
     if (m_material == null)
     {
         m_material = _materialTemplate.GetMaterialPrototype().Clone();
     }
     else
     {
         m_material.ChangeMaterialTemplate(_materialTemplate);
     }
 }
コード例 #2
0
        /**
         * @brief Load material template under a directory
         *
         * @param _materialDirectory material templates directory
         *
         * @result materialTemplateList containing the templates
         * */
        public static CatMaterialTemplateList LoadMaterialTemplates(string _materialDirectory)
        {
            CatMaterialTemplateList materialList = new CatMaterialTemplateList();

            // search for .material files under _materialDirectory
            if (!Directory.Exists(_materialDirectory))
            {
                return(materialList);
            }
            string[] files = Directory.GetFiles(_materialDirectory, "*.material");
            foreach (string file in files)
            {
                CatMaterialTemplate materialTempalte = CatMaterialTemplate.LoadMaterialTemplate(file);
                // get name from file
                // TODO: add sub-directory support
                string materialName = Path.GetFileNameWithoutExtension(file);
                materialTempalte.SetName(materialName);
                materialList.m_materialTemplates.Add(materialName, materialTempalte);
            }
            return(materialList);
        }
コード例 #3
0
        /**
         * @brief Create materialTemplate from .material file
         *
         * @param _filepath filepath
         *
         * @result the materialTemplate
         * */
        public static CatMaterialTemplate LoadMaterialTemplate(string _filepath)
        {
            // create material template
            CatMaterialTemplate newMaterialTemplate = new CatMaterialTemplate();
            CatMaterial         materialPrototype   = newMaterialTemplate.GetMaterialPrototype();
            // load .material file
            XmlDocument doc = new XmlDocument();

            doc.Load(_filepath);
            XmlNode    nodeMaterial = doc.SelectSingleNode("Material");
            XmlElement eleMaterial  = (XmlElement)nodeMaterial;
            string     materialName = eleMaterial.GetAttribute("fxname");

            // read material parameter
            if (nodeMaterial != null)
            {
                foreach (XmlNode node in nodeMaterial.ChildNodes)
                {
                    XmlElement       eleNode        = (XmlElement)node;
                    string           parameterName  = eleNode.GetAttribute("name");
                    string           parameterType  = eleNode.GetAttribute("type");
                    string           parameterValue = eleNode.GetAttribute("value");
                    IEffectParameter variable       = CatMaterial.CreateVariable(parameterType, parameterValue);
                    if (variable != null)
                    {
                        materialPrototype.AddParameter(parameterName, variable);
                    }
                    // check if should show in editor, by checking whether note="NotInEditor"
                    string parameterNote = eleNode.GetAttribute("note");
                    if (parameterNote != null && parameterNote.Contains("NotInEditor"))
                    {
                        newMaterialTemplate.m_maskedParameters.Add(parameterName, true);
                    }
                }
            }
            // load effect
            newMaterialTemplate.m_effect = Mgr <CatProject> .Singleton.contentManger.Load <Effect>("effect\\" + materialName);

            return(newMaterialTemplate);
        }
コード例 #4
0
ファイル: CatMaterial.cs プロジェクト: LeonXJ/Catsland-XNA
        /**
         * @brief Switch to another materialTemplate. Keep as many parameters as possible
         *        name and type are checked
         *
         * @param _materialTemplate the target material template
         * */
        public void ChangeMaterialTemplate(CatMaterialTemplate _materialTemplate)
        {
            Debug.Assert(_materialTemplate != null, "Null target material template.");

            Dictionary <string, IEffectParameter> newParameters    = new Dictionary <string, IEffectParameter>();
            Dictionary <string, IEffectParameter> targetParameters = _materialTemplate.GetMaterialPrototype().m_parameters;

            foreach (KeyValuePair <string, IEffectParameter> keyValue in m_parameters)
            {
                string parameterName = keyValue.Key;
                if (targetParameters.ContainsKey(parameterName))
                {
                    if (keyValue.Value.GetType() == targetParameters[parameterName].GetType())
                    {
                        // same name and same type, copy
                        newParameters[parameterName] = keyValue.Value.ParameterClone();
                    }
                    else
                    {
                        // type not match
                        newParameters[parameterName] = targetParameters[parameterName].ParameterClone();
                    }
                }
            }
            // add missing parameters
            foreach (KeyValuePair <string, IEffectParameter> keyValue in targetParameters)
            {
                if (!newParameters.ContainsKey(keyValue.Key))
                {
                    newParameters[keyValue.Key] = keyValue.Value.ParameterClone();
                }
            }

            m_parameters       = newParameters;
            m_materialTemplate = _materialTemplate;
        }
コード例 #5
0
ファイル: CatMaterial.cs プロジェクト: LeonXJ/Catsland-XNA
 public CatMaterial(CatMaterialTemplate _materialTemplate)
 {
     m_parameters       = new Dictionary <string, IEffectParameter>();
     m_materialTemplate = _materialTemplate;
 }