public static void ChangeSettingVisible(ChaCustom.CvsAccessory __instance) { if (HairAccessoryCustomizer.GetController(MakerAPI.GetCharacterControl()).IsHairAccessory((int)__instance.slotNo) && HairAccessoryCustomizer.ColorMatchToggle.GetSelectedValue()) { Traverse.Create(AccessoriesApi.GetCvsAccessory((int)__instance.slotNo)).Field("btnInitColor").GetValue <Button>().transform.parent.gameObject.SetActive(false); } }
private void PopulateListAccessory() { var chaControl = MakerAPI.GetCharacterControl(); int coordinateIndex = MaterialEditorPlugin.GetCharaController(chaControl).CurrentCoordinateIndex; var chaAccessoryComponent = AccessoriesApi.GetAccessory(MakerAPI.GetCharacterControl(), AccessoriesApi.SelectedMakerAccSlot); PopulateList(chaAccessoryComponent?.gameObject, ObjectType.Accessory, coordinateIndex: coordinateIndex, slot: AccessoriesApi.SelectedMakerAccSlot); }
private void Awake() { var insideStudio = Application.productName.StartsWith("PlayHomeStudio"); MakerAPI.Init(insideStudio); StudioAPI.Init(insideStudio); CharacterApi.Init(); AccessoriesApi.Init(); }
/// <summary> /// Shows the accessory color controls for the current slot /// </summary> internal static void ShowAccColors(bool showButton) { if (!MakerAPI.InsideAndLoaded) { return; } AccessoriesApi.GetCvsAccessory(AccessoriesApi.SelectedMakerAccSlot).ChangeUseColorVisible(); Traverse.Create(AccessoriesApi.GetCvsAccessory(AccessoriesApi.SelectedMakerAccSlot)).Field("btnInitColor").GetValue <Button>().transform.parent.gameObject.SetActive(showButton); }
private static void ChangeSettingVisible(ChaCustom.CvsAccessory __instance) { if (!MakerAPI.InsideAndLoaded) { return; } if (GetController(MakerAPI.GetCharacterControl()).IsHairAccessory((int)__instance.slotNo) && ColorMatchToggle.GetSelectedValue()) { Traverse.Create(AccessoriesApi.GetMakerAccessoryPageObject((int)__instance.slotNo).GetComponent <CvsAccessory>()).Field("btnInitColor").GetValue <Button>().transform.parent.gameObject.SetActive(false); } }
/// <summary> /// Checks if the specified accessory is a hair accessory /// </summary> public bool IsHairAccessory(int slot) { try { return(AccessoriesApi.GetAccessory(ChaControl, slot)?.gameObject.GetComponent <ChaCustomHairComponent>() != null); } catch { return(false); } }
private void Update() { if (RemoveHotkey.Value.IsDown() && MakerAPI.InsideAndLoaded) { var customChangeMainMenu = FindObjectOfType <CustomChangeMainMenu>(); if (customChangeMainMenu.items[4].tglItem.isOn) //Accessory tab is selected //Set the Type dropdown to the "None" option which removes the accessory { AccessoriesApi.GetMakerAccessoryPageObject(AccessoriesApi.SelectedMakerAccSlot).GetComponent <CvsAccessory>().ddAcsType.value = 0; } } }
/// <summary> /// Checks if the specified accessory is a hair accessory and has accessory parts (rendAccessory in the ChaCustomHairComponent MonoBehavior) /// </summary> public bool HasAccessoryPart() { var chaCustomHairComponent = AccessoriesApi.GetAccessory(ChaControl, AccessoriesApi.SelectedMakerAccSlot)?.gameObject.GetComponent <ChaCustomHairComponent>(); if (chaCustomHairComponent != null) { foreach (Renderer renderer in chaCustomHairComponent.rendAccessory) { if (renderer != null) { return(true); } } } return(false); }
/// <summary> /// Checks if the specified accessory has length transforms (trfLength in the ChaCustomHairComponent MonoBehavior) /// </summary> public bool HasLengthTransforms() { var chaCustomHairComponent = AccessoriesApi.GetAccessory(ChaControl, AccessoriesApi.SelectedMakerAccSlot)?.gameObject.GetComponent <ChaCustomHairComponent>(); if (chaCustomHairComponent != null) { foreach (Transform transform in chaCustomHairComponent.trfLength) { if (transform != null) { return(true); } } } return(false); }
/// <summary> /// Hides the accessory color controls for the current slot /// </summary> internal static void HideAccColors() { if (!MakerAPI.InsideAndLoaded) { return; } var cvsAccessory = AccessoriesApi.GetMakerAccessoryPageObject(AccessoriesApi.SelectedMakerAccSlot).GetComponent <CvsAccessory>(); cvsAccessory.separateColor.SetActive(false); cvsAccessory.btnAcsColor01.transform.parent.gameObject.SetActive(false); cvsAccessory.btnAcsColor02.transform.parent.gameObject.SetActive(false); cvsAccessory.btnAcsColor03.transform.parent.gameObject.SetActive(false); cvsAccessory.btnAcsColor04.transform.parent.gameObject.SetActive(false); cvsAccessory.btnInitColor.transform.parent.gameObject.SetActive(false); }
/// <summary> /// Hides the accessory color controls for the current slot /// </summary> internal static void HideAccColors() { if (!MakerAPI.InsideAndLoaded) { return; } var cvsAccessory = AccessoriesApi.GetCvsAccessory(AccessoriesApi.SelectedMakerAccSlot); Traverse.Create(cvsAccessory).Field("separateColor").GetValue <GameObject>().SetActive(false); Traverse.Create(cvsAccessory).Field("btnAcsColor01").GetValue <Button>().transform.parent.gameObject.SetActive(false); Traverse.Create(cvsAccessory).Field("btnAcsColor02").GetValue <Button>().transform.parent.gameObject.SetActive(false); Traverse.Create(cvsAccessory).Field("btnAcsColor03").GetValue <Button>().transform.parent.gameObject.SetActive(false); Traverse.Create(cvsAccessory).Field("btnAcsColor04").GetValue <Button>().transform.parent.gameObject.SetActive(false); Traverse.Create(cvsAccessory).Field("btnInitColor").GetValue <Button>().transform.parent.gameObject.SetActive(false); }
/// <summary> /// Sets up the visibility and values for the current slot /// </summary> internal static void InitCurrentSlot(HairAccessoryController controller, bool hairAccessory) { if (!MakerAPI.InsideAndLoaded) { return; } if (hairAccessory) { ColorMatchToggle.SetSelectedValue(controller.GetColorMatch(), false); HairGlossToggle.SetSelectedValue(controller.GetHairGloss(), false); OutlineColorPicker.SetSelectedValue(controller.GetOutlineColor(), false); AccessoryColorPicker.SetSelectedValue(controller.GetAccessoryColor(), false); HairLengthSlider.SetSelectedValue(controller.GetHairLength(), false); ColorMatchToggle.Control.Visible.OnNext(true); HairGlossToggle.Control.Visible.OnNext(true); OutlineColorPicker.Control.Visible.OnNext(!controller.GetColorMatch()); AccessoryColorPicker.Control.Visible.OnNext(controller.HasAccessoryPart()); HairLengthSlider.Control.Visible.OnNext(controller.HasLengthTransforms()); if (controller.GetColorMatch(AccessoriesApi.SelectedMakerAccSlot)) { HideAccColors(); } else { ShowAccColors(true); } } else { ColorMatchToggle.SetSelectedValue(ColorMatchDefault, false); HairGlossToggle.SetSelectedValue(HairGlossDefault, false); OutlineColorPicker.SetSelectedValue(OutlineColorDefault, false); AccessoryColorPicker.SetSelectedValue(AccessoryColorDefault, false); HairGlossToggle.Control.Visible.OnNext(false); ColorMatchToggle.Control.Visible.OnNext(false); OutlineColorPicker.Control.Visible.OnNext(false); AccessoryColorPicker.Control.Visible.OnNext(false); HairLengthSlider.Control.Visible.OnNext(false); ShowAccColors(AccessoriesApi.GetAccessory(controller.ChaControl, AccessoriesApi.SelectedMakerAccSlot) != null); } }
/// <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; }
private void Start() { // Needs to be called after moreaccessories has a chance to load AccessoriesApi.Init(); }
private IEnumerator LoadData(bool clothes, bool accessories, bool hair) { yield return(null); foreach (var property in RendererPropertyList) { if (property.ObjectType == ObjectType.Clothing && clothes && property.CoordinateIndex == CurrentCoordinateIndex) { foreach (var rend in ChaControl.objClothes[property.Slot].GetComponentsInChildren <Renderer>()) { if (rend.NameFormatted() == property.RendererName) { SetRendererProperty(rend, property.Property, int.Parse(property.Value)); } } } else if (property.ObjectType == ObjectType.Accessory && accessories && property.CoordinateIndex == CurrentCoordinateIndex) { foreach (var rend in AccessoriesApi.GetAccessory(ChaControl, property.Slot)?.gameObject.GetComponentsInChildren <Renderer>()) { if (rend.name == property.RendererName) { SetRendererProperty(rend, property.Property, int.Parse(property.Value)); } } } else if (property.ObjectType == ObjectType.Hair && hair) { foreach (var rend in ChaControl.objHair[property.Slot]?.gameObject.GetComponentsInChildren <Renderer>()) { if (rend.name == property.RendererName) { SetRendererProperty(rend, property.Property, int.Parse(property.Value)); } } } } foreach (var property in MaterialFloatPropertyList) { if (property.ObjectType == ObjectType.Clothing && clothes && property.CoordinateIndex == CurrentCoordinateIndex) { foreach (var rend in ChaControl.objClothes[property.Slot].GetComponentsInChildren <Renderer>()) { foreach (var mat in rend.materials) { if (mat.NameFormatted() == property.MaterialName) { SetFloatProperty(ChaControl.objClothes[property.Slot], mat, property.Property, property.Value); } } } } else if (property.ObjectType == ObjectType.Accessory && accessories && property.CoordinateIndex == CurrentCoordinateIndex) { foreach (var rend in AccessoriesApi.GetAccessory(ChaControl, property.Slot)?.gameObject.GetComponentsInChildren <Renderer>()) { foreach (var mat in rend.materials) { if (mat.NameFormatted() == property.MaterialName) { SetFloatProperty(AccessoriesApi.GetAccessory(ChaControl, property.Slot)?.gameObject, mat, property.Property, property.Value); } } } } else if (property.ObjectType == ObjectType.Hair && hair) { foreach (var rend in ChaControl.objHair[property.Slot]?.gameObject.GetComponentsInChildren <Renderer>()) { foreach (var mat in rend.materials) { if (mat.NameFormatted() == property.MaterialName) { SetFloatProperty(ChaControl.objHair[property.Slot]?.gameObject, mat, property.Property, property.Value); } } } } } foreach (var property in MaterialColorPropertyList) { if (property.ObjectType == ObjectType.Clothing && clothes && property.CoordinateIndex == CurrentCoordinateIndex) { foreach (var rend in ChaControl.objClothes[property.Slot].GetComponentsInChildren <Renderer>()) { foreach (var mat in rend.materials) { if (mat.NameFormatted() == property.MaterialName) { SetColorProperty(ChaControl.objClothes[property.Slot], mat, property.Property, property.Value); } } } } else if (property.ObjectType == ObjectType.Accessory && accessories && property.CoordinateIndex == CurrentCoordinateIndex) { foreach (var rend in AccessoriesApi.GetAccessory(ChaControl, property.Slot)?.gameObject.GetComponentsInChildren <Renderer>()) { foreach (var mat in rend.materials) { if (mat.NameFormatted() == property.MaterialName) { SetColorProperty(AccessoriesApi.GetAccessory(ChaControl, property.Slot)?.gameObject, mat, property.Property, property.Value); } } } } else if (property.ObjectType == ObjectType.Hair && hair) { foreach (var rend in ChaControl.objHair[property.Slot]?.gameObject.GetComponentsInChildren <Renderer>()) { foreach (var mat in rend.materials) { if (mat.NameFormatted() == property.MaterialName) { SetColorProperty(ChaControl.objHair[property.Slot]?.gameObject, mat, property.Property, property.Value); } } } } } }
internal void PopulateListAccessory() { var chaAccessoryComponent = AccessoriesApi.GetAccessory(MakerAPI.GetCharacterControl(), AccessoriesApi.SelectedMakerAccSlot); PopulateList(chaAccessoryComponent?.gameObject, slot: AccessoriesApi.SelectedMakerAccSlot); }
/// <summary> /// Checks if the specified accessory is a hair accessory /// </summary> public bool IsHairAccessory(int slot) => AccessoriesApi.GetAccessory(ChaControl, slot)?.gameObject.GetComponent <ChaCustomHairComponent>() != null;
public static void UpdateAccessoryMoveFromInfo(int slotNo, ChaControl __instance) => RemoveNullParts(AccessoriesApi.GetAccessory(__instance, slotNo)?.gameObject?.GetComponent <ChaCustomHairComponent>());