Exemplo n.º 1
0
 // Token: 0x060000D5 RID: 213 RVA: 0x0000A7A4 File Offset: 0x000089A4
 public ACCMaterial(ACCMaterial src)
 {
     this.Original    = src;
     this.renderer    = src.renderer;
     this.material    = src.material;
     this.name        = src.name;
     this.type        = src.type;
     this.renderQueue = src.renderQueue;
     this.editColors  = src.editColors;
     this.pickers     = src.pickers;
     this.editVals    = src.editVals;
 }
Exemplo n.º 2
0
        // Token: 0x060001A2 RID: 418 RVA: 0x0000F858 File Offset: 0x0000DA58
        public string ToText(ACCMaterial target)
        {
            Material      material      = target.material;
            StringBuilder stringBuilder = new StringBuilder();

            stringBuilder.Append("1000\r\n");
            stringBuilder.Append(target.name.ToLower()).Append("\r\n");
            stringBuilder.Append(target.name).Append("\r\n");
            string name = target.type.name;

            stringBuilder.Append(name).Append("\r\n");
            stringBuilder.Append(ShaderType.GetMateName(name)).Append("\r\n\r\n");
            ShaderType type = target.type;

            foreach (ShaderPropTex shaderPropTex in type.texProps)
            {
                stringBuilder.Append("tex\r\n");
                string keyName = shaderPropTex.keyName;
                stringBuilder.Append('\t').Append(keyName).Append("\r\n");
                Texture texture = material.GetTexture(shaderPropTex.propId);
                if (texture == null)
                {
                    stringBuilder.Append("\tnull\r\n");
                }
                else
                {
                    stringBuilder.Append("\ttex2d\r\n");
                    stringBuilder.Append('\t').Append(texture.name).Append("\r\n");
                    stringBuilder.Append('\t').Append(MateHandler.settings.txtPrefixTex).Append(texture.name).Append(".png\r\n");
                    Vector2 textureOffset = material.GetTextureOffset(keyName);
                    Vector2 textureScale  = material.GetTextureScale(keyName);
                    stringBuilder.Append("\t").Append(textureOffset.x).Append(' ').Append(textureOffset.y).Append(' ').Append(textureScale.x).Append(' ').Append(textureScale.y).Append("\r\n");
                }
            }
            foreach (ShaderPropColor shaderPropColor in type.colProps)
            {
                stringBuilder.Append("col\r\n");
                string keyName2 = shaderPropColor.keyName;
                stringBuilder.Append('\t').Append(keyName2).Append("\r\n");
                Color color = material.GetColor(keyName2);
                stringBuilder.Append('\t').Append(color.r).Append(' ').Append(color.g).Append(' ').Append(color.b).Append(' ').Append(color.a).Append("\r\n");
            }
            foreach (ShaderPropFloat shaderPropFloat in type.fProps)
            {
                stringBuilder.Append("f\r\n");
                string keyName3 = shaderPropFloat.keyName;
                stringBuilder.Append('\t').Append(keyName3).Append("\r\n");
                float @float = material.GetFloat(keyName3);
                stringBuilder.Append('\t').Append(@float).Append("\r\n");
            }
            return(stringBuilder.ToString());
        }
        // 編集前と後でオブジェクトを分ける場合用(未使用)
        public ACCMaterial(ACCMaterial src)
        {
            this.original = src;
            this.renderer = src.renderer;
            this.material = src.material;
            this.name     = src.name;
            //this.shader = src.shader;
            //this.type1 = src.type1;
            this.type = src.type;

            this.renderQueue = src.renderQueue;

            // TODO 配列の中身はディープコピーとする
            this.editColors = src.editColors;
            this.editVals   = src.editVals;
        }
        // 編集前と後でオブジェクトを分ける場合用(未使用)
        public ACCMaterial(ACCMaterial src) {
            this.original = src;
            this.renderer = src.renderer;
            this.material = src.material;
            this.name = src.name;
            //this.shader = src.shader;
            //this.type1 = src.type1;
            this.type = src.type;

            this.renderQueue = src.renderQueue;
            
            // TODO 配列の中身はディープコピーとする 
            this.editColors = src.editColors;
            this.editVals = src.editVals;
            
        }
Exemplo n.º 5
0
        // 編集前と後でオブジェクトを分ける場合用(未使用)
        public ACCMaterial(ACCMaterial src)
        {
            Original = src;
            renderer = src.renderer;
            material = src.material;
            name     = src.name;
            //this.shader = src.shader;
            //this.type1 = src.type1;
            type = src.type;

            renderQueue = src.renderQueue;

            // TODO 配列の中身はディープコピーとする
            editColors = src.editColors;
            pickers    = src.pickers;
            editVals   = src.editVals;
        }
//        public void ReflectTo(Material m) {
//            m.SetFloat("_SetManualRenderQueue", renderQueue.val);
//            m.renderQueue = (int)renderQueue.val;
//
//            if (type1.hasColor) {
//                m.SetColor(PROP_COLOR, color.val.Value);
//            }
//            if (type1.isLighted) {
//                m.SetColor(PROP_SHADOWC, shadowColor.val.Value);
//                m.SetFloat("_Shininess", shininess.val);
//            }
//            if (type1.isOutlined) {
//                m.SetColor(PROP_OUTLINEC, outlineColor.val.Value);
//                m.SetFloat("_OutlineWidth", outlineWidth.val);
//            }
//            if (type1.isToony) {
//                m.SetColor(PROP_RIMC, rimColor.val.Value);
//                m.SetFloat("_RimPower", rimPower.val);
//                m.SetFloat("_RimShift", rimShift.val);
//            }
//            if (type1.isHair) {
//                m.SetFloat("_HiRate", hiRate.val);
//                m.SetFloat("_HiPow", hiPow.val);
//            }
//            if (type1.isHair) {
//                m.SetFloat("_HiRate", hiRate.val);
//                m.SetFloat("_HiPow", hiPow.val);
//            }
//            if (type1.hasFloat1) {
//                m.SetFloat("_FloatValue1", floatVal1.val);
//            }
//            if (type1.hasFloat2) {
//                m.SetFloat("_FloatValue2", floatVal2.val);
//            }
//            if (type1.hasFloat3) {
//                m.SetFloat("_FloatValue3", floatVal3.val);
//            }
//            if (type1.hasCutoff) {
//                m.SetFloat("_Cutoff", cutoff.val);
//            }
//        }
        public bool hasChanged(ACCMaterial mate)
        {
            // 同一シェーダを想定
            for (int i = 0; i < editColors.Length; i++)
            {
                if (this.editColors[i].val != mate.editColors[i].val)
                {
                    return(true);
                }
            }
            for (int i = 0; i < editVals.Length; i++)
            {
                if (!NumberUtil.Equals(this.editVals[i].val, mate.editVals[i].val))
                {
                    return(true);
                }
            }
            return(false);
        }
Exemplo n.º 7
0
 // Token: 0x060001A5 RID: 421 RVA: 0x0000FC7C File Offset: 0x0000DE7C
 public bool Write(ACCMaterial target, string mateText, int apply)
 {
     using (StringReader stringReader = new StringReader(mateText))
     {
         FileUtilEx instance = FileUtilEx.Instance;
         stringReader.ReadLine();
         Material material = target.material;
         stringReader.ReadLine();
         stringReader.ReadLine();
         string text = stringReader.ReadLine();
         stringReader.ReadLine();
         if ((apply & MateHandler.MATE_SHADER) > 0 && material.shader.name != text)
         {
             target.ChangeShader(text, -1);
         }
         ShaderType    type  = target.type;
         string        text2 = stringReader.ReadLine();
         List <string> list  = new List <string>();
         while (text2 != null)
         {
             if (text2.Length != 0 && text2[0] != '\t')
             {
                 list.Clear();
                 string text3 = text2.Trim();
                 while ((text2 = stringReader.ReadLine()) != null)
                 {
                     if (text2.Length != 0)
                     {
                         if (text2[0] != '\t')
                         {
                             break;
                         }
                         string text4 = text2.Trim();
                         if (text4.Length > 0)
                         {
                             list.Add(text4);
                         }
                     }
                 }
                 string a;
                 if (list.Count != 0 && (a = text3) != null)
                 {
                     if (!(a == "tex"))
                     {
                         if (!(a == "col") && !(a == "vec"))
                         {
                             if (a == "f")
                             {
                                 if ((apply & MateHandler.MATE_FLOAT) > 0 && list.Count >= 2)
                                 {
                                     string     text5      = list[0];
                                     ShaderProp shaderProp = type.GetShaderProp(text5);
                                     float      value;
                                     if (shaderProp == null)
                                     {
                                         LogUtil.Log(new object[]
                                         {
                                             "シェーダに対応していないプロパティのためスキップします.propName=",
                                             text5
                                         });
                                     }
                                     else if (!float.TryParse(list[1], out value))
                                     {
                                         LogUtil.Log(new object[]
                                         {
                                             "指定文字列はfloatに変換できません。スキップします。propName={0}, text={1}",
                                             text5,
                                             list[1]
                                         });
                                     }
                                     else
                                     {
                                         material.SetFloat(shaderProp.propId, value);
                                         LogUtil.DebugF("float set({0})", new object[]
                                         {
                                             text5
                                         });
                                     }
                                 }
                             }
                         }
                         else if ((apply & MateHandler.MATE_COLOR) > 0 && list.Count >= 2)
                         {
                             string     text6       = list[0];
                             ShaderProp shaderProp2 = type.GetShaderProp(text6);
                             if (shaderProp2 == null)
                             {
                                 LogUtil.Log(new object[]
                                 {
                                     "シェーダに対応していないプロパティのためスキップします.propName=",
                                     text6
                                 });
                             }
                             else
                             {
                                 float[] array = this.ParseVals(list[1], text6, 4);
                                 if (array != null)
                                 {
                                     Color value2 = new Color(array[0], array[1], array[2], array[3]);
                                     material.SetColor(shaderProp2.propId, value2);
                                     LogUtil.DebugF("color set ({0})", new object[]
                                     {
                                         text6
                                     });
                                 }
                             }
                         }
                     }
                     else if ((apply & MateHandler.MATE_TEX) > 0)
                     {
                         if (list.Count == 2)
                         {
                             if (list[1] == "null")
                             {
                                 material.SetTexture(list[0], null);
                             }
                         }
                         else if (list.Count < 5)
                         {
                             string text7 = string.Empty;
                             if (list.Count >= 1)
                             {
                                 text7 = "propName=" + list[0];
                             }
                             LogUtil.Log(new object[]
                             {
                                 "指定パラメータが不足しているためtexの適用をスキップします.",
                                 text7
                             });
                         }
                         else
                         {
                             string     text8       = list[0];
                             string     text9       = list[2];
                             ShaderProp shaderProp3 = type.GetShaderProp(text8);
                             if (shaderProp3 == null)
                             {
                                 LogUtil.Log(new object[]
                                 {
                                     "シェーダに対応していないプロパティのためスキップします.propName=",
                                     text8
                                 });
                             }
                             else
                             {
                                 Texture texture = material.GetTexture(shaderProp3.propId);
                                 if (texture == null || texture.name != text9)
                                 {
                                     if (!text9.ToLower().EndsWith(FileConst.EXT_TEXTURE, StringComparison.Ordinal))
                                     {
                                         text9 += FileConst.EXT_TEXTURE;
                                     }
                                     if (!instance.Exists(text9))
                                     {
                                         LogUtil.LogF("tex({0}) not found. (propName={1})", new object[]
                                         {
                                             text9,
                                             text8
                                         });
                                         continue;
                                     }
                                     Texture2D value3 = instance.LoadTexture(text9);
                                     material.SetTexture(shaderProp3.propId, value3);
                                 }
                                 float[] array2 = this.ParseVals(list[4], text8, 4);
                                 if (array2 == null)
                                 {
                                     LogUtil.DebugF("tex({0}) prop is null", new object[]
                                     {
                                         text9
                                     });
                                 }
                                 else
                                 {
                                     material.SetTextureOffset(shaderProp3.propId, new Vector2(array2[0], array2[1]));
                                     material.SetTextureScale(shaderProp3.propId, new Vector2(array2[2], array2[3]));
                                     LogUtil.DebugF("tex({0}) loaded to {1}", new object[]
                                     {
                                         text9,
                                         shaderProp3.keyName
                                     });
                                 }
                             }
                         }
                     }
                 }
             }
             else
             {
                 text2 = stringReader.ReadLine();
             }
         }
     }
     return(true);
 }
Exemplo n.º 8
0
 // Token: 0x060001A4 RID: 420 RVA: 0x0000FC6C File Offset: 0x0000DE6C
 public bool Write(ACCMaterial target, string mateText)
 {
     return(this.Write(target, mateText, MateHandler.MATE_ALL));
 }
        public string ToText(ACCMaterial target)
        {
            var mate = target.material;
            var buff = new StringBuilder();

            // ゲーム中にバージョン、name1を保持していないので制限事項
            // mateファイルの特定も少し手間が掛かるため、まずは暫定処置
            buff.Append("1000\r\n");
            buff.Append(target.name.ToLower()).Append("\r\n");
            buff.Append(target.name).Append("\r\n");
            string shaderName = target.type.name;

            buff.Append(shaderName).Append("\r\n");
            buff.Append(ShaderType.GetShader2(shaderName)).Append("\r\n\r\n");

            var type = target.type;

            // tex
            foreach (var texProp in type.texProps)
            {
                buff.Append("tex\r\n");
                var propName = texProp.keyName;
                buff.Append('\t').Append(propName).Append("\r\n");
                var tex = mate.GetTexture(texProp.propId);
                if (tex == null)
                {
                    buff.Append("\tnull\r\n");
                }
                else
                {
                    buff.Append("\ttex2d\r\n");
                    buff.Append('\t').Append(tex.name).Append("\r\n");                                   // tex name
                    // なんちゃってテキストパス (これもゲーム中にデータが残らないため)
                    buff.Append('\t').Append(settings.txtPrefixTex).Append(tex.name).Append(".png\r\n"); // tex path
                    //
                    var offset = mate.GetTextureOffset(propName);
                    var scale  = mate.GetTextureScale(propName);
                    buff.Append("\t").Append(offset.x).Append(' ').Append(offset.y)
                    .Append(' ').Append(scale.x).Append(' ').Append(scale.y).Append("\r\n");
                }
            }
            // col
            foreach (var colProp in type.colProps)
            {
                buff.Append("col\r\n");
                var propName = colProp.keyName;
                buff.Append('\t').Append(propName).Append("\r\n");
                var color = mate.GetColor(propName);
                buff.Append('\t').Append(color.r).Append(' ')
                .Append(color.g).Append(' ')
                .Append(color.b).Append(' ')
                .Append(color.a).Append("\r\n");
            }

            // f
            foreach (var prop in type.fProps)
            {
                buff.Append("f\r\n");
                var propName = prop.keyName;
                buff.Append('\t').Append(propName).Append("\r\n");
                var fVal = mate.GetFloat(propName);
                buff.Append('\t').Append(fVal).Append("\r\n");
            }

            return(buff.ToString());
        }
//        public void ReflectTo(Material m) {
//            m.SetFloat("_SetManualRenderQueue", renderQueue.val);
//            m.renderQueue = (int)renderQueue.val;
//
//            if (type1.hasColor) {
//                m.SetColor(PROP_COLOR, color.val.Value);
//            }
//            if (type1.isLighted) {
//                m.SetColor(PROP_SHADOWC, shadowColor.val.Value);
//                m.SetFloat("_Shininess", shininess.val);
//            }
//            if (type1.isOutlined) {
//                m.SetColor(PROP_OUTLINEC, outlineColor.val.Value);
//                m.SetFloat("_OutlineWidth", outlineWidth.val);
//            }
//            if (type1.isToony) {
//                m.SetColor(PROP_RIMC, rimColor.val.Value);
//                m.SetFloat("_RimPower", rimPower.val);
//                m.SetFloat("_RimShift", rimShift.val);
//            }
//            if (type1.isHair) {
//                m.SetFloat("_HiRate", hiRate.val);
//                m.SetFloat("_HiPow", hiPow.val);
//            }
//            if (type1.isHair) {
//                m.SetFloat("_HiRate", hiRate.val);
//                m.SetFloat("_HiPow", hiPow.val);
//            }
//            if (type1.hasFloat1) {
//                m.SetFloat("_FloatValue1", floatVal1.val);
//            }
//            if (type1.hasFloat2) {
//                m.SetFloat("_FloatValue2", floatVal2.val);
//            }
//            if (type1.hasFloat3) {
//                m.SetFloat("_FloatValue3", floatVal3.val);
//            }
//            if (type1.hasCutoff) {
//                m.SetFloat("_Cutoff", cutoff.val);
//            }
//        }
        public bool hasChanged(ACCMaterial mate) {
            // 同一シェーダを想定
            for (int i=0; i< editColors.Length; i++) {
                if (this.editColors[i].val != mate.editColors[i].val) return true;
            }
            for (int i=0; i< editVals.Length; i++) {
                if ( !NumberUtil.Equals(this.editVals[i].val, mate.editVals[i].val) ) return true;
            }
            return false;
        }
Exemplo n.º 11
0
 // Token: 0x060000DB RID: 219 RVA: 0x0000AD70 File Offset: 0x00008F70
 public bool HasChanged(ACCMaterial mate)
 {
     return(this.editColors.Where((EditColor t, int i) => t.val != mate.editColors[i].val).Any <EditColor>() || this.editVals.Where((EditValue t, int i) => !NumberUtil.Equals(t.val, mate.editVals[i].val, 0.001f)).Any <EditValue>());
 }
        public bool Write(ACCMaterial target, string mateText, int apply=MATE_ALL) {
            using (var sr = new StringReader(mateText)) {
                var outUtil = FileUtilEx.Instance;
                
                sr.ReadLine(); // version
                var mate = target.material;
    
                // TODO マテリアル名を変更か、あるいはマテリアル名に対応するRenderQueueを設定
                sr.ReadLine(); // name1
                sr.ReadLine(); // name2
    
                var shader = sr.ReadLine(); // shader1
                sr.ReadLine(); // shader2
                if ((apply & MATE_SHADER) > 0) {
                    if (mate.shader.name != shader) {
                        target.ChangeShader(shader);
                    }
                }            
                var shaderType = target.type;

                // シェーダに対応していないプロパティはスルー
                // 
                
                // ヘッダ部分は読み捨て
                for (int i = 0; i < 5; i++) sr.ReadLine(); 
                
                var line = sr.ReadLine();
                var work = new List<string>();
                while (line != null) {
                    if (line.Length != 0 && line[0] != '\t') {
                        work.Clear();
                        // 次のタイプまで読み込み
                        string type = line.Trim();
                        while ((line = sr.ReadLine()) != null) {
                            if (line.Length == 0)
                                continue;
                            if (line[0] == '\t') {
                                var val = line.Trim();
                                if (val.Length > 0)
                                    work.Add(val);
                                
                            } else {
                                break;
                            }
                        }
                        if (work.Count == 0)
                            continue;
                        
                        switch (type) {
                            case "tex":
                                if ((apply & MATE_TEX) > 0) {
                                    if (work.Count == 2) {
                                        if (work[1] == "null") {
                                            mate.SetTexture(work[0], null);
                                        }
                                        continue;
                                        
                                    } else if (work.Count < 5)  {
                                        string tmp = string.Empty;
                                        if (work.Count >= 1) {
                                            tmp = "propName="+work[0];
                                        }
                                        LogUtil.Log("指定パラメータが不足しているためtexの適用をスキップします.", tmp);
                                        continue;
                                    }
                                    var propName1 = work[0];
                                    var texName  = work[2];
                                    var texKey = shaderType.GetShaderProp(propName1);
                                    if (texKey == null) {
                                        LogUtil.Log("シェーダに対応していないプロパティのためスキップします.propName=", propName1);
                                        continue;
                                    }
                                    // tex名が同一の場合はは変更しない
                                    var prevTex = mate.GetTexture(texKey.propId);
                                    if (prevTex != null && prevTex.name == texName) continue;
                                    
                                    var fvals = parseVals(work[4], propName1, 4);
                                    if (fvals == null) continue;
                                    
                                    if (!texName.ToLower().EndsWith(FileConst.EXT_TEXTURE, StringComparison.Ordinal)) {
                                        texName += FileConst.EXT_TEXTURE;
                                    }
                                    
                                    if (!outUtil.Exists(texName)) {
                                        LogUtil.LogF("tex({0}) not found. (propName={1})", texName, propName1);
                                        continue;
                                    }
                                    // テクスチャの適用
                                    var tex2d = outUtil.LoadTexture(texName);
                                    mate.SetTexture(texKey.propId, tex2d);
                                    mate.SetTextureOffset(propName1, new UnityEngine.Vector2(fvals[0], fvals[1]));
                                    mate.SetTextureScale(propName1, new UnityEngine.Vector2(fvals[2], fvals[3]));
                                    LogUtil.DebugF("tex({0}) loaded to {1}", texName, propName1);
                                }
                                break;
    
                            case "col":
                            case "vec":
                                if ((apply & MATE_COLOR) > 0) {
                                    if (work.Count < 2)
                                        continue;
        
                                    var propName2 = work[0];
                                    var texKey2 = shaderType.GetShaderProp(propName2);
                                    if (texKey2 == null) {
                                        LogUtil.Log("シェーダに対応していないプロパティのためスキップします.propName=", propName2);
                                        continue;
                                    }
                                    var colVals = parseVals(work[1], propName2, 4);
                                    if (colVals == null)
                                        continue;
                                    
                                    var color = new Color(colVals[0], colVals[1], colVals[2], colVals[3]);
                                    mate.SetColor(texKey2.propId, color);
                                    LogUtil.DebugF("color set ({0})", propName2);
                                }
                                break;
                                
                            case "f":
                                if ((apply & MATE_FLOAT) > 0) {
                                    if (work.Count < 2)
                                        continue;
        
                                    var propName3 = work[0];
                                    var texKey3 = shaderType.GetShaderProp(propName3);
                                    if (texKey3 == null) {
                                        LogUtil.Log("シェーダに対応していないプロパティのためスキップします.propName=", propName3);
                                        continue;
                                    }
                                    float fVal;
                                    if (!float.TryParse(work[1], out fVal)) {
                                        LogUtil.Log("指定文字列はfloatに変換できません。スキップします。propName={0}, text={1}", propName3, work[1]);
                                        continue;
                                    }
                                    
                                    mate.SetFloat(texKey3.propId, fVal);
                                    LogUtil.DebugF("float set({0})", propName3);
                                }
                                break;
                        }
                        
                    } else {
                        line = sr.ReadLine();
                    }
                }
            }
            return true;
        }
  public string ToText(ACCMaterial target) {
      var mate = target.material;
      var buff = new StringBuilder();
      // ゲーム中にバージョン、name1を保持していないので制限事項
      // mateファイルの特定も少し手間が掛かるため、まずは暫定処置
      buff.Append("1000\r\n");
      buff.Append(target.name.ToLower()).Append("\r\n");
      buff.Append(target.name).Append("\r\n");
      string shaderName = target.type.name;
      buff.Append(shaderName).Append("\r\n");
      buff.Append(ShaderType.GetShader2(shaderName)).Append("\r\n\r\n");
      
      var type = target.type;
      // tex
      foreach (var texProp in type.texProps) {
          buff.Append("tex\r\n");
          var propName = texProp.keyName;
          buff.Append('\t').Append(propName).Append("\r\n");
          var tex = mate.GetTexture(texProp.propId);
          if (tex == null) {
              buff.Append("\tnull\r\n");
          } else {
              buff.Append("\ttex2d\r\n");
              buff.Append('\t').Append(tex.name).Append("\r\n"); // tex name
              // なんちゃってテキストパス (これもゲーム中にデータが残らないため)
              buff.Append('\t').Append(settings.txtPrefixTex).Append(tex.name).Append(".png\r\n"); // tex path
              // 
              var offset = mate.GetTextureOffset(propName);
              var scale = mate.GetTextureScale(propName);
              buff.Append("\t").Append(offset.x).Append(' ').Append(offset.y)
                  .Append(' ').Append(scale.x).Append(' ').Append(scale.y).Append("\r\n");
          }
      }
      // col
      foreach (var colProp in type.colProps) {
          buff.Append("col\r\n");
          var propName = colProp.keyName;
          buff.Append('\t').Append(propName).Append("\r\n");
          var color = mate.GetColor(propName);
          buff.Append('\t').Append(color.r).Append(' ')
              .Append(color.g).Append(' ')
              .Append(color.b).Append(' ')
              .Append(color.a).Append("\r\n");
      }            
 
      // f
      foreach (var prop in type.fProps) {
          buff.Append("f\r\n");
          var propName = prop.keyName;
          buff.Append('\t').Append(propName).Append("\r\n");
          var fVal = mate.GetFloat(propName);
          buff.Append('\t').Append(fVal).Append("\r\n");
      }            
      
      return buff.ToString();        
  }
Exemplo n.º 14
0
        // Token: 0x06000139 RID: 313 RVA: 0x0000C670 File Offset: 0x0000A870
        public void Init(ACCMaterial edited)
        {
            this.editedMat = edited;
            if (!this.onlyModel && !string.IsNullOrEmpty(this.filename))
            {
                LogUtil.Debug(new object[]
                {
                    "load material file",
                    this.filename
                });
                this.srcMat        = ACCMaterialEx.Load(this.filename);
                this.shaderChanged = (this.editedMat.type != this.srcMat.type);
            }
            if (edited.type.isTrans)
            {
                if (Math.Abs(edited.renderQueue.val - 2000f) < 0.01f)
                {
                    this.needPmat = false;
                }
                else
                {
                    this.needPmat = true;
                    string matName     = (this.srcMat != null) ? this.srcMat.name2 : edited.name;
                    float  renderQueue = MaterialUtil.GetRenderQueue(matName);
                    if (renderQueue < 0f)
                    {
                        this.needPmatChange = true;
                    }
                    LogUtil.DebugF("render queue: src={0}, edited={1}", new object[]
                    {
                        renderQueue,
                        edited.renderQueue
                    });
                    this.needPmatChange |= !NumberUtil.Equals(edited.renderQueue.val, renderQueue, 0.01f);
                    this.pmatExport      = this.needPmatChange;
                }
            }
            if (!this.shaderChanged && this.srcMat != null)
            {
                this.hasParamChanged = this.editedMat.HasChanged(this.srcMat);
            }
            this.editname = this.editedMat.material.name;
            Maid currentMaid = MaidHolder.Instance.CurrentMaid;

            foreach (ShaderPropTex shaderPropTex in this.editedMat.type.texProps)
            {
                LogUtil.Debug(new object[]
                {
                    "propName:",
                    shaderPropTex.key
                });
                Texture texture = this.editedMat.material.GetTexture(shaderPropTex.propId);
                TextureModifier.FilterParam filter = ACCTexturesView.GetFilter(currentMaid, this.slotName, this.editedMat.material, shaderPropTex.propId);
                bool         flag  = filter != null && !filter.HasNotChanged();
                bool         flag2 = false;
                ACCTextureEx acctextureEx;
                if (texture != null && this.srcMat != null && this.srcMat.texDic.TryGetValue(shaderPropTex.key, out acctextureEx))
                {
                    flag2 = (acctextureEx.editname != texture.name);
                }
                TargetTexture value = new TargetTexture(flag, flag2, texture)
                {
                    filter = filter
                };
                this.texDic[shaderPropTex.key] = value;
                this.hasTexColorChanged        = (this.hasTexColorChanged || flag);
                this.hasTexFileChanged         = (this.hasTexFileChanged || flag2);
            }
            LogUtil.Debug(new object[]
            {
                "target material initialized"
            });
        }
        public void Init(ACCMaterial edited) {
            this.editedMat = edited;

            // ファイルからマテリアル情報をロード
            if (onlyModel) {
                // modelファイルからマテリアルのロード
                
            } else if (!string.IsNullOrEmpty(filename)) {
                LogUtil.Debug("load material file", filename);
                srcMat = ACCMaterialEx.Load(filename);
                shaderChanged = (editedMat.type != srcMat.type);
            }

            // pmat チェック
            //  透過型のみを対象とし、
            //     1. マテリアル名に対応するpmatが存在しない場合
            //     2. renderQueueが変更されている場合
            if (edited.type.isTrans) {
                // renderqueueがデフォルト値であれば変更不要
                if (Math.Abs(edited.renderQueue.val - 2000) < 0.01f) {
                    this.needPmat = false;
                } else {
                    this.needPmat = true;

                    string matName = (srcMat != null)? srcMat.name2 : edited.name;
                    float srcRq = MaterialType.GetRenderQueue(matName);
                    // 既存のマテリアル名に対応するpmatが存在しない => 変更必要
                    if (srcRq < 0) this.needPmatChange = true;
                    LogUtil.DebugF("render queue: src={0}, edited={1}", srcRq, edited.renderQueue);
    
                    this.needPmatChange |= !NumberUtil.Equals(edited.renderQueue.val, srcRq, 0.01f);
                    this.pmatExport = needPmatChange;
                }
            }

            if (!shaderChanged) {
                // TODO modelロードでsrcMatを作成した場合は条件削除可能
                if (srcMat != null) hasParamChanged = editedMat.hasChanged(srcMat);
            }

            this.editname = editedMat.material.name;
            var maid = MaidHolder.Instance.currentMaid;

            // テクスチャの変更フラグチェック
            foreach (var texProp in editedMat.type.texProps) {
            //foreach (string propName in editedMat.type1.texPropNames) {
                LogUtil.Debug("propName:", texProp.key);
                
                Texture tex = editedMat.material.GetTexture(texProp.propId);
                var filter = ACCTexturesView.GetFilter(maid, slotName, editedMat.material, texProp.propId);
                var colorChanged = (filter != null) && !filter.hasNotChanged();
                var fileChanged = false;
                if (tex != null && srcMat != null) {
                    ACCTextureEx baseTex;
                    if (srcMat.texDic.TryGetValue(texProp.key, out baseTex)) {
                        fileChanged = (baseTex.editname != tex.name);
                    }
                }
                var trgtTex = new TargetTexture(colorChanged, fileChanged, tex);
                trgtTex.filter = filter;
                texDic[texProp.key] = trgtTex;
                hasTexColorChanged  |= colorChanged;
                hasTexFileChanged   |= fileChanged;
            }
            LogUtil.Debug("target material initialized");
        }
Exemplo n.º 16
0
        public void Init(ACCMaterial edited)
        {
            editedMat = edited;

            // ファイルからマテリアル情報をロード
            if (onlyModel)
            {
                // modelファイルからマテリアルのロード
            }
            else if (!string.IsNullOrEmpty(filename))
            {
                LogUtil.Debug("load material file", filename);
                srcMat        = ACCMaterialEx.Load(filename);
                shaderChanged = (editedMat.type != srcMat.type);
            }

            // pmat チェック
            //  透過型のみを対象とし、
            //     1. マテリアル名に対応するpmatが存在しない場合
            //     2. renderQueueが変更されている場合
            if (edited.type.isTrans)
            {
                // renderqueueがデフォルト値であれば変更不要
                if (Math.Abs(edited.renderQueue.val - 2000) < 0.01f)
                {
                    needPmat = false;
                }
                else
                {
                    needPmat = true;

                    var matName = (srcMat != null)? srcMat.name2 : edited.name;
                    var srcRq   = MaterialUtil.GetRenderQueue(matName);
                    // 既存のマテリアル名に対応するpmatが存在しない => 変更必要
                    if (srcRq < 0)
                    {
                        needPmatChange = true;
                    }
                    LogUtil.DebugF("render queue: src={0}, edited={1}", srcRq, edited.renderQueue);

                    needPmatChange |= !NumberUtil.Equals(edited.renderQueue.val, srcRq, 0.01f);
                    pmatExport      = needPmatChange;
                }
            }

            if (!shaderChanged)
            {
                // TODO modelロードでsrcMatを作成した場合は条件削除可能
                if (srcMat != null)
                {
                    hasParamChanged = editedMat.HasChanged(srcMat);
                }
            }

            editname = editedMat.material.name;
            var maid = MaidHolder.Instance.CurrentMaid;

            // テクスチャの変更フラグチェック
            foreach (var texProp in editedMat.type.texProps)
            {
                //foreach (string propName in editedMat.type1.texPropNames) {
                LogUtil.Debug("propName:", texProp.key);

                var tex          = editedMat.material.GetTexture(texProp.propId);
                var filter       = ACCTexturesView.GetFilter(maid, slotName, editedMat.material, texProp.propId);
                var colorChanged = (filter != null) && !filter.HasNotChanged();
                var fileChanged  = false;
                if (tex != null && srcMat != null)
                {
                    ACCTextureEx baseTex;
                    if (srcMat.texDic.TryGetValue(texProp.key, out baseTex))
                    {
                        fileChanged = (baseTex.editname != tex.name);
                    }
                }

                var trgtTex = new TargetTexture(colorChanged, fileChanged, tex)
                {
                    filter = filter
                };
                texDic[texProp.key] = trgtTex;
                hasTexColorChanged |= colorChanged;
                hasTexFileChanged  |= fileChanged;
            }
            LogUtil.Debug("target material initialized");
        }
 public ACCMaterialsView(Renderer r, Material m, int idx) {
     //original = new ACCMaterial(m, r);
     //edited = new ACCMaterial(original);
     this.matIdx = idx;
     edited = new ACCMaterial(m, r);
 }
 public bool Write(ACCMaterial target, string mateText)
 {
     return(Write(target, mateText, MATE_ALL));
 }
        public bool Write(ACCMaterial target, string mateText, int apply = MATE_ALL)
        {
            using (var sr = new StringReader(mateText)) {
                var outUtil = FileUtilEx.Instance;

                sr.ReadLine(); // version
                var mate = target.material;

                // TODO マテリアル名を変更か、あるいはマテリアル名に対応するRenderQueueを設定
                sr.ReadLine();              // name1
                sr.ReadLine();              // name2

                var shader = sr.ReadLine(); // shader1
                sr.ReadLine();              // shader2
                if ((apply & MATE_SHADER) > 0)
                {
                    if (mate.shader.name != shader)
                    {
                        target.ChangeShader(shader);
                    }
                }
                var shaderType = target.type;

                // シェーダに対応していないプロパティはスルー
                //

                // ヘッダ部分は読み捨て
                for (int i = 0; i < 5; i++)
                {
                    sr.ReadLine();
                }

                var line = sr.ReadLine();
                var work = new List <string>();
                while (line != null)
                {
                    if (line.Length != 0 && line[0] != '\t')
                    {
                        work.Clear();
                        // 次のタイプまで読み込み
                        string type = line.Trim();
                        while ((line = sr.ReadLine()) != null)
                        {
                            if (line.Length == 0)
                            {
                                continue;
                            }
                            if (line[0] == '\t')
                            {
                                var val = line.Trim();
                                if (val.Length > 0)
                                {
                                    work.Add(val);
                                }
                            }
                            else
                            {
                                break;
                            }
                        }
                        if (work.Count == 0)
                        {
                            continue;
                        }

                        switch (type)
                        {
                        case "tex":
                            if ((apply & MATE_TEX) > 0)
                            {
                                if (work.Count == 2)
                                {
                                    if (work[1] == "null")
                                    {
                                        mate.SetTexture(work[0], null);
                                    }
                                    continue;
                                }
                                else if (work.Count < 5)
                                {
                                    string tmp = string.Empty;
                                    if (work.Count >= 1)
                                    {
                                        tmp = "propName=" + work[0];
                                    }
                                    LogUtil.Log("指定パラメータが不足しているためtexの適用をスキップします.", tmp);
                                    continue;
                                }
                                var propName1 = work[0];
                                var texName   = work[2];
                                var texKey    = shaderType.GetShaderProp(propName1);
                                if (texKey == null)
                                {
                                    LogUtil.Log("シェーダに対応していないプロパティのためスキップします.propName=", propName1);
                                    continue;
                                }
                                // tex名が同一の場合はは変更しない
                                var prevTex = mate.GetTexture(texKey.propId);
                                if (prevTex != null && prevTex.name == texName)
                                {
                                    continue;
                                }

                                var fvals = parseVals(work[4], propName1, 4);
                                if (fvals == null)
                                {
                                    continue;
                                }

                                if (!texName.ToLower().EndsWith(FileConst.EXT_TEXTURE, StringComparison.Ordinal))
                                {
                                    texName += FileConst.EXT_TEXTURE;
                                }

                                if (!outUtil.Exists(texName))
                                {
                                    LogUtil.LogF("tex({0}) not found. (propName={1})", texName, propName1);
                                    continue;
                                }
                                // テクスチャの適用
                                var tex2d = outUtil.LoadTexture(texName);
                                mate.SetTexture(texKey.propId, tex2d);
                                mate.SetTextureOffset(propName1, new UnityEngine.Vector2(fvals[0], fvals[1]));
                                mate.SetTextureScale(propName1, new UnityEngine.Vector2(fvals[2], fvals[3]));
                                LogUtil.DebugF("tex({0}) loaded to {1}", texName, propName1);
                            }
                            break;

                        case "col":
                        case "vec":
                            if ((apply & MATE_COLOR) > 0)
                            {
                                if (work.Count < 2)
                                {
                                    continue;
                                }

                                var propName2 = work[0];
                                var texKey2   = shaderType.GetShaderProp(propName2);
                                if (texKey2 == null)
                                {
                                    LogUtil.Log("シェーダに対応していないプロパティのためスキップします.propName=", propName2);
                                    continue;
                                }
                                var colVals = parseVals(work[1], propName2, 4);
                                if (colVals == null)
                                {
                                    continue;
                                }

                                var color = new Color(colVals[0], colVals[1], colVals[2], colVals[3]);
                                mate.SetColor(texKey2.propId, color);
                                LogUtil.DebugF("color set ({0})", propName2);
                            }
                            break;

                        case "f":
                            if ((apply & MATE_FLOAT) > 0)
                            {
                                if (work.Count < 2)
                                {
                                    continue;
                                }

                                var propName3 = work[0];
                                var texKey3   = shaderType.GetShaderProp(propName3);
                                if (texKey3 == null)
                                {
                                    LogUtil.Log("シェーダに対応していないプロパティのためスキップします.propName=", propName3);
                                    continue;
                                }
                                float fVal;
                                if (!float.TryParse(work[1], out fVal))
                                {
                                    LogUtil.Log("指定文字列はfloatに変換できません。スキップします。propName={0}, text={1}", propName3, work[1]);
                                    continue;
                                }

                                mate.SetFloat(texKey3.propId, fVal);
                                LogUtil.DebugF("float set({0})", propName3);
                            }
                            break;
                        }
                    }
                    else
                    {
                        line = sr.ReadLine();
                    }
                }
            }
            return(true);
        }
Exemplo n.º 20
0
 public bool HasChanged(ACCMaterial mate)
 {
     // 同一シェーダを想定
     return(editColors.Where((t, i) => t.val != mate.editColors[i].val).Any() ||
            editVals.Where((t, i) => !NumberUtil.Equals(t.val, mate.editVals[i].val)).Any());
 }