public void AssignTarget(Shader _shader) { targetShader = _shader; int propCount = ShaderUtil.GetPropertyCount(_shader); targetShaderProps.Clear(); propertyMapping.Clear(); for (int i = 0; i < propCount; i++) { string propName = ShaderUtil.GetPropertyName(_shader, i); var propType = ShaderUtil.GetPropertyType(_shader, i); var shaderProp = new ShaderProp(ShaderUtil.GetPropertyName(_shader, i), ShaderUtil.GetPropertyType(_shader, i)); if (!targetShaderProps.ContainsKey(shaderProp.type)) { targetShaderProps.Add(shaderProp.type, new List <ShaderProp>()); } targetShaderProps[shaderProp.type].Add(shaderProp); } foreach (var prop in sourceShaderProps) { if (!targetShaderProps.ContainsKey(prop.type)) { continue; } int index = targetShaderProps[prop.type].FindIndex(o => o.name == prop.name && o.type == prop.type); if (index >= 0) { propertyMapping[prop] = targetShaderProps[prop.type][index]; } } }
void setShaderValue(ShaderProp prop) { if (prop.type == "toggle") { float val = material.GetFloat(prop.name); if (val > 0.0f) { material.DisableKeyword(prop.key); material.SetFloat(prop.name, 0.0f); } else { material.EnableKeyword(prop.key); material.SetFloat(prop.name, 1.0f); } } }
public ShaderMapping(Shader _shader, EditorWindow window) { sourceShader = _shader; int propCount = ShaderUtil.GetPropertyCount(_shader); sourceShaderProps = new ShaderProp[propCount]; for (int i = 0; i < propCount; i++) { string propName = ShaderUtil.GetPropertyName(_shader, i); ShaderUtil.ShaderPropertyType propType = ShaderUtil.GetPropertyType(_shader, i); sourceShaderProps[i] = new ShaderProp(ShaderUtil.GetPropertyName(_shader, i), ShaderUtil.GetPropertyType(_shader, i)); } targetShader = null; targetShaderProps = new Dictionary <ShaderUtil.ShaderPropertyType, List <ShaderProp> >(); propertyMapping = new Dictionary <ShaderProp, ShaderProp>(); show = new AnimBool(true); show.valueChanged.AddListener(window.Repaint); }
// Token: 0x0600025D RID: 605 RVA: 0x00015254 File Offset: 0x00013454 public void TransferMaterial(BinaryReader reader, BinaryWriter writer, TargetMaterial trgtMat, bool overwrite) { reader.ReadString(); writer.Write(trgtMat.editname); string text = reader.ReadString(); string value = reader.ReadString(); if (trgtMat.shaderChanged) { text = trgtMat.ShaderNameOrDefault(text); value = ShaderType.GetMateName(text); } writer.Write(text); writer.Write(value); ShaderType type = trgtMat.editedMat.type; HashSet <PropKey> hashSet = new HashSet <PropKey>(); for (;;) { string text2 = reader.ReadString(); if (text2 == "end") { break; } string text3 = reader.ReadString(); ShaderProp shaderProp = type.GetShaderProp(text3); if (shaderProp == null) { this.DiscardMateProp(reader, text2); } else { string a; if (!overwrite) { this.TransferMateProp(reader, writer, text2, text3); } else if ((a = text2) != null) { if (!(a == "tex")) { if (!(a == "col") && !(a == "vec")) { if (a == "f") { this.Write(writer, new string[] { text2, text3 }); this.Write(writer, trgtMat.editedMat.material.GetFloat(text3)); this.DiscardMateProp(reader, text2); } } else { this.Write(writer, new string[] { text2, text3 }); this.Write(writer, trgtMat.editedMat.material.GetColor(text3)); this.DiscardMateProp(reader, text2); } } else { TargetTexture targetTexture; trgtMat.texDic.TryGetValue(shaderProp.key, out targetTexture); if (targetTexture == null || targetTexture.tex == null || targetTexture.fileChanged || targetTexture.colorChanged) { if (targetTexture != null) { targetTexture.worksuffix = trgtMat.worksuffix; } string workfilename = null; this.TransferMateProp(reader, null, text2, null, ref workfilename); if (targetTexture != null) { targetTexture.workfilename = workfilename; } this.WriteTex(writer, text3, trgtMat, targetTexture); } else { this.TransferMateProp(reader, writer, text2, text3); } } } hashSet.Add(shaderProp.key); } } if (type.KeyCount() != hashSet.Count) { foreach (ShaderPropTex shaderPropTex in type.texProps) { if (!hashSet.Contains(shaderPropTex.key)) { TargetTexture trgtTex; trgtMat.texDic.TryGetValue(shaderPropTex.key, out trgtTex); this.WriteTex(writer, shaderPropTex.keyName, trgtMat, trgtTex); } } foreach (ShaderPropColor shaderPropColor in type.colProps) { if (!hashSet.Contains(shaderPropColor.key)) { this.Write(writer, new string[] { shaderPropColor.type.ToString(), shaderPropColor.keyName }); this.Write(writer, trgtMat.editedMat.material.GetColor(shaderPropColor.propId)); } } foreach (ShaderPropFloat shaderPropFloat in type.fProps) { if (!hashSet.Contains(shaderPropFloat.key)) { this.Write(writer, new string[] { shaderPropFloat.type.ToString(), shaderPropFloat.keyName }); this.Write(writer, trgtMat.editedMat.material.GetFloat(shaderPropFloat.propId)); } } } writer.Write("end"); }