protected MaterialInformation GetMaterial(MaterialInformation root_material, int sub_index) { var m = m_importer.GetSubMaterials(root_material, sub_index).GetEnumerator(); if(m.MoveNext()) { return m.Current; } return null; }
public IMaterialTemplate ResolveTemplate(GameObject node, MaterialInformation settings) { MaterialTemplate t = node.GetComponent<MaterialTemplate>(); if(t == null) { Debug.LogError(string.Format("No template could be found for node {0}",node.name)); t = AddDefault(node); } return t; }
protected bool MaterialHasSubmaterials(MaterialInformation settings) { switch(settings.m_className) { case "Shell Material": case "Multi/Sub-Object": return true; default: return false; } }
public Material ResolveCachedMaterial(IMaterialTemplate template, MaterialInformation settings) { if(!m_materialsCache.ContainsKey(template)) { m_materialsCache.Add(template, new Dictionary<ulong, Material>()); } var sd = m_materialsCache[template]; if(!sd.ContainsKey(settings.m_handle)) { sd.Add(settings.m_handle, template.CreateNewInstance(settings)); } return sd[settings.m_handle]; }
public Material CreateNewInstance(MaterialInformation settings) { /* Create the new material object */ Material material = new Material(m_template); /* Set the parameters */ foreach(var p in m_parameterMapping){ if(!p.m_sourceName.IsValid() | !p.m_destinationName.IsValid()){ continue; } SetGenericMaterialProperty(material, p.m_destinationName, settings.MaterialProperties.GetProperty(p.m_sourceName)); } return material; }
MaterialInformation GetMaterialProperties(IMtl material) { if (material == null) { return null; } MaterialInformation m = new MaterialInformation(); m.m_className = material.ClassName; m.m_materialName = material.Name; m.m_handle = _gi.Animatable.GetHandleByAnim(material).ToUInt64(); var prps = EnumerateProperties(material).ToList(); foreach (var p in EnumerateProperties(material)) { m.MaterialProperties.Add(new MaterialProperty(p.m_parameterName, p.m_internalName, p.GetValue())); } return m; }
public IEnumerable<MaterialInformation> GetSubMaterials(MaterialInformation material, int index) { var m = ExchangeIsochronous(new MessageMaterialRequest(material.m_handle, index)) as MessageMaterials; return m.m_matchingMaterials; }