private static void SetMaterialsOriginal(GameObject go) { ChaCustomHairComponent chaCustomHairComponent = go.GetComponentInChildren <ChaCustomHairComponent>(); if (chaCustomHairComponent != null) { chaCustomHairComponent.SetMaterialsOriginal(); } ChaClothesComponent chaClothesComponent = go.GetComponentInChildren <ChaClothesComponent>(); if (chaClothesComponent != null) { chaClothesComponent.SetMaterialsOriginal(); } Studio.ItemComponent itemComponent = go.GetComponentInChildren <Studio.ItemComponent>(); if (itemComponent != null) { itemComponent.SetMaterialsOriginal(); } ChaAccessoryComponent chaAccessoryComponent = go.GetComponentInChildren <ChaAccessoryComponent>(); if (chaAccessoryComponent != null) { chaAccessoryComponent.SetMaterialsOriginal(); } }
public static bool ChangeSettingHairAcsColorPrefix(int parts, ChaControl __instance) { int HairAcsColorNum = __instance.GetHairAcsColorNum(parts); if (HairAcsColorNum == 0) { return(false); } ChaCustomHairComponent customHairComponent = __instance.GetCustomHairComponent(parts); if (null == customHairComponent) { return(false); } for (int i = 0; i < customHairComponent.rendAccessory.Length; i++) { for (int j = 0; j < HairAcsColorNum; j++) { if (customHairComponent.rendAccessory[i] == null) //Added null check { return(false); } } } return(true); }
private static void RemoveNullParts(ChaCustomHairComponent hairComponent) { if (hairComponent == null) { return; } hairComponent.rendAccessory = hairComponent.rendAccessory.RemoveNulls(); hairComponent.rendHair = hairComponent.rendHair.RemoveNulls(); hairComponent.trfLength = hairComponent.trfLength.RemoveNulls(); }
public static bool ChaCustomHairComponentUpdatePrefix(ChaCustomHairComponent __instance) { if (__instance.trfLength != null) { for (int i = 0; i < __instance.trfLength.Length; i++) { if (__instance.trfLength[i] == null) //Added null check { return(false); } } } return(true); }
public static bool ChangeSettingHairColor(int parts, bool c00, bool c01, bool c02, ChaControl __instance) { ChaCustomHairComponent customHairComponent = __instance.GetCustomHairComponent(parts); if (null == customHairComponent || customHairComponent.rendHair == null || customHairComponent.rendHair.Length == 0) { return(false); } ChaFileHair hair = __instance.chaFile.custom.hair; for (int i = 0; i < customHairComponent.rendHair.Length; i++) { if (c00) { if (1f > hair.parts[parts].baseColor.a) { hair.parts[parts].baseColor = new Color(hair.parts[parts].baseColor.r, hair.parts[parts].baseColor.g, hair.parts[parts].baseColor.b, 1f); } if (customHairComponent.rendHair[i] != null) //Added null check { customHairComponent.rendHair[i].material.SetColor(ChaShader._Color, hair.parts[parts].baseColor); } } if (c01) { if (1f > hair.parts[parts].startColor.a) { hair.parts[parts].startColor = new Color(hair.parts[parts].startColor.r, hair.parts[parts].startColor.g, hair.parts[parts].startColor.b, 1f); } if (customHairComponent.rendHair[i] != null) //Added null check { customHairComponent.rendHair[i].material.SetColor(ChaShader._Color2, hair.parts[parts].startColor); } } if (c02) { if (1f > hair.parts[parts].endColor.a) { hair.parts[parts].endColor = new Color(hair.parts[parts].endColor.r, hair.parts[parts].endColor.g, hair.parts[parts].endColor.b, 1f); } if (customHairComponent.rendHair[i] != null) //Added null check { customHairComponent.rendHair[i].material.SetColor(ChaShader._Color3, hair.parts[parts].endColor); } } } return(false); }
public static bool HarmonyPatch_ChaCustomHairComponent_Update(ChaCustomHairComponent __instance) { if (__instance.trfLength != null) { for (int i = 0; i < __instance.trfLength.Length; i++) { var transform = __instance.trfLength[i]; if (transform) // Check trfLength[i] before using it { float y = __instance.baseLength[i] + Mathf.Lerp(0f, __instance.addLength, __instance.lengthRate); transform.localPosition = new Vector3(transform.localPosition.x, y, transform.localPosition.z); } } } return(false); }
public static bool ChangeSettingHairOutlineColor(int parts, ChaControl __instance) { ChaCustomHairComponent customHairComponent = __instance.GetCustomHairComponent(parts); if (null == customHairComponent || customHairComponent.rendHair == null || customHairComponent.rendHair.Length == 0) { return(false); } ChaFileHair hair = __instance.chaFile.custom.hair; for (int i = 0; i < customHairComponent.rendHair.Length; i++) { if (customHairComponent.rendHair[i] != null) //Added null check { customHairComponent.rendHair[i].material.SetColor(ChaShader._LineColor, hair.parts[parts].outlineColor); } } return(false); }
public static bool ChangeSettingHairAcsColor(int parts, ChaControl __instance) { int hairAcsColorNum = __instance.GetHairAcsColorNum(parts); if (hairAcsColorNum == 0) { return(false); } ChaCustomHairComponent customHairComponent = __instance.GetCustomHairComponent(parts); if (null == customHairComponent) { return(false); } int[] array = new int[] { ChaShader._Color, ChaShader._Color2, ChaShader._Color3 }; ChaFileHair hair = __instance.chaFile.custom.hair; for (int i = 0; i < customHairComponent.rendAccessory.Length; i++) { for (int j = 0; j < hairAcsColorNum; j++) { if (1f > hair.parts[parts].acsColor[j].a) { hair.parts[parts].acsColor[j] = new Color(hair.parts[parts].acsColor[j].r, hair.parts[parts].acsColor[j].g, hair.parts[parts].acsColor[j].b, 1f); } if (customHairComponent.rendAccessory[i] != null) //Added null check { customHairComponent.rendAccessory[i].material.SetColor(array[j], hair.parts[parts].acsColor[j]); } } } return(false); }
/// <summary> /// Updates the specified hair accessory /// </summary> public void UpdateAccessory(int slot, bool updateCharacter = true) { if (!IsHairAccessory(slot)) { return; } var acc = ChaControl.GetAccessoryObject(slot); if (acc == null) { return; } ChaAccessoryComponent chaAccessoryComponent = acc.GetComponent <ChaAccessoryComponent>(); if (chaAccessoryComponent == null) { return; } ChaCustomHairComponent chaCustomHairComponent = chaAccessoryComponent.gameObject.GetComponent <ChaCustomHairComponent>(); if (chaCustomHairComponent.rendHair == null) { return; } if (!HairAccessories.ContainsKey(CurrentCoordinateIndex)) { return; } if (!HairAccessories[CurrentCoordinateIndex].TryGetValue(slot, out var hairAccessoryInfo)) { return; } if (chaAccessoryComponent.rendNormal == null) { return; } if (chaCustomHairComponent.rendHair == null) { return; } if (updateCharacter && hairAccessoryInfo.ColorMatch) { if (MakerAPI.InsideAndLoaded) { CvsAccessory cvsAccessory = AccessoriesApi.GetMakerAccessoryPageObject(slot).GetComponent <CvsAccessory>(); cvsAccessory.UpdateAcsColor01(ChaControl.chaFile.custom.hair.parts[0].baseColor); cvsAccessory.UpdateAcsColor02(ChaControl.chaFile.custom.hair.parts[0].startColor); cvsAccessory.UpdateAcsColor03(ChaControl.chaFile.custom.hair.parts[0].endColor); OutlineColorPicker.SetValue(slot, ChaControl.chaFile.custom.hair.parts[0].outlineColor, false); hairAccessoryInfo.OutlineColor = ChaControl.chaFile.custom.hair.parts[0].outlineColor; } else { for (var i = 0; i < chaCustomHairComponent.rendHair.Length; i++) { Renderer renderer = chaCustomHairComponent.rendHair[i]; if (renderer == null) { continue; } if (renderer.sharedMaterial.HasProperty(ChaShader._Color)) { renderer.sharedMaterial.SetColor(ChaShader._Color, ChaControl.chaFile.custom.hair.parts[0].baseColor); } if (renderer.sharedMaterial.HasProperty(ChaShader._Color2)) { renderer.sharedMaterial.SetColor(ChaShader._Color2, ChaControl.chaFile.custom.hair.parts[0].startColor); } if (renderer.sharedMaterial.HasProperty(ChaShader._Color3)) { renderer.sharedMaterial.SetColor(ChaShader._Color3, ChaControl.chaFile.custom.hair.parts[0].endColor); } } } } Texture2D texHairGloss = (Texture2D)AccessTools.Property(typeof(ChaControl), "texHairGloss").GetValue(ChaControl, null); for (var i = 0; i < chaCustomHairComponent.rendHair.Length; i++) { Renderer renderer = chaCustomHairComponent.rendHair[i]; if (renderer == null) { continue; } if (renderer.sharedMaterial.HasProperty(ChaShader._HairGloss)) { if (hairAccessoryInfo.HairGloss) { renderer.sharedMaterial.SetTexture(ChaShader._HairGloss, texHairGloss); } else { renderer.sharedMaterial.SetTexture(ChaShader._HairGloss, null); } } if (renderer.sharedMaterial.HasProperty(ChaShader._LineColor)) { if (hairAccessoryInfo.ColorMatch) { renderer.sharedMaterial.SetColor(ChaShader._LineColor, ChaControl.chaFile.custom.hair.parts[0].outlineColor); } else { renderer.sharedMaterial.SetColor(ChaShader._LineColor, hairAccessoryInfo.OutlineColor); } } } for (var i = 0; i < chaCustomHairComponent.rendAccessory.Length; i++) { Renderer renderer = chaCustomHairComponent.rendAccessory[i]; if (renderer == null) { continue; } if (renderer.sharedMaterial.HasProperty(ChaShader._Color)) { renderer.sharedMaterial.SetColor(ChaShader._Color, hairAccessoryInfo.AccessoryColor); } if (renderer.sharedMaterial.HasProperty(ChaShader._Color2)) { renderer.sharedMaterial.SetColor(ChaShader._Color2, hairAccessoryInfo.AccessoryColor); } if (renderer.sharedMaterial.HasProperty(ChaShader._Color3)) { renderer.sharedMaterial.SetColor(ChaShader._Color3, hairAccessoryInfo.AccessoryColor); } } chaCustomHairComponent.lengthRate = hairAccessoryInfo.HairLength; }