private static void SetSkinColor(ChaControl chaControl, ColorMatchPart colorMatchPart, string file)
                {
                    //get main tex
                    Texture2D mainTexture = CommonLib.LoadAsset <Texture2D>(file, colorMatchPart.MainTex, false, string.Empty);

                    if (mainTexture == null)
                    {
                        return;
                    }

                    //get color mask
                    Texture2D colorMask = CommonLib.LoadAsset <Texture2D>(file, colorMatchPart.ColorMask, false, string.Empty);

                    if (colorMask == null)
                    {
                        return;
                    }

                    //find the game object
                    FindAssist findAssist = new FindAssist();

                    findAssist.Initialize(chaControl.objBody.transform);
                    GameObject gameObject = findAssist.GetObjectFromName(colorMatchPart.Object);

                    if (gameObject == null)
                    {
                        return;
                    }

                    if (!gameObject.GetComponent <Renderer>().material.HasProperty(ChaShader._MainTex))
                    {
                        return;
                    }

                    var customTex = new CustomTextureControl(gameObject.transform);

                    customTex.Initialize(file, colorMatchPart.Material, string.Empty, file, colorMatchPart.MaterialCreate, string.Empty, 2048, 2048);

                    customTex.SetMainTexture(mainTexture);
                    customTex.SetColor(ChaShader._Color, chaControl.chaFile.custom.body.skinMainColor);

                    customTex.SetTexture(ChaShader._ColorMask, colorMask);
                    customTex.SetColor(ChaShader._Color2, chaControl.chaFile.custom.body.skinSubColor);

                    //set the new texture
                    var newTex = customTex.RebuildTextureAndSetMaterial();

                    if (newTex == null)
                    {
                        return;
                    }

                    Material mat = gameObject.GetComponent <Renderer>().material;
                    var      mt  = mat.GetTexture(ChaShader._MainTex);

                    mat.SetTexture(ChaShader._MainTex, newTex);
                    //Destroy the old texture to prevent memory leak
                    Destroy(mt);
                }
Exemplo n.º 2
0
 static void Postfix(CustomTextureControl __instance)
 {
     if (HarmonyPatch_Config.BasicSettings.enableSkinDiffuseMipMap)
     {
         var createTex = Traverse.Create(__instance).Field("createTex");
         createTex.Property("filterMode").SetValue(FilterMode.Trilinear);
         createTex.Property("useMipMap").SetValue(true);
     }
 }
Exemplo n.º 3
0
            static bool Prefix(ref string propertyName, ref int baseW, ref int baseH, ref int addW, ref int addH, ref float addPx, ref float addPy, CustomTextureControl __instance)
            {
                if (!__instance.InitEnd)
                {
                    return(false);
                }

                if (addPx >= 0f & addPy >= 0f & (float)addW + addPx <= 1024f & (float)addH + addPy <= 1024f)
                {
                    baseW = 1024;
                    baseH = 1024;
                }
                else
                {
                    addPx = Mathf.Abs(addPx);
                    addPy = Mathf.Abs(addPy);
                    baseH = 4096;
                    baseW = 4096;
                }

                float num  = (float)baseW / (float)addW;
                float num2 = (float)baseH / (float)addH;
                float ox   = -(addPx / (float)baseW) * num;
                float oy   = -(((float)baseH - addPy - (float)addH) / (float)baseH) * num2;

                __instance.SetOffsetAndTiling(propertyName, num, num2, ox, oy);

                return(false);
            }