/// <summary> /// Colorize a Note based on a ColorManager and CustomNote configuration /// </summary> /// <param name="color">Color</param> /// <param name="colorStrength">Color strength</param> /// <param name="noteObject">Note to colorize</param> public static void ColorizeCustomNote(Color color, float colorStrength, GameObject noteObject) { if (!noteObject || color == null) { return; } Color noteColor = color * colorStrength; IEnumerable <Transform> childTransforms = noteObject.GetComponentsInChildren <Transform>(); foreach (Transform childTransform in childTransforms) { DisableNoteColorOnGameobject colorDisabled = childTransform.GetComponent <DisableNoteColorOnGameobject>(); if (!colorDisabled) { Renderer childRenderer = childTransform.GetComponent <Renderer>(); if (childRenderer) { childRenderer.material.SetColor("_Color", noteColor); } } } MaterialPropertyBlockController materialPropertyBlockController = noteObject.GetComponent <MaterialPropertyBlockController>(); // Set the color of material property block controllers, for the replaced note shader if (materialPropertyBlockController != null) { materialPropertyBlockController.materialPropertyBlock.SetColor("_Color", noteColor); materialPropertyBlockController.ApplyChanges(); } }
/// <summary> /// Adds a MaterialPropertyBlockController to the root of the gameObject. Only selects renderers with specific shaders. /// </summary> /// <param name="gameObject"></param> public static void AddMaterialPropertyBlockController(GameObject gameObject) { List <Renderer> rendererList = new List <Renderer>(); foreach (Renderer renderer in gameObject.GetComponentsInChildren <Renderer>()) { DisableNoteColorOnGameobject colorDisabled = renderer.GetComponent <DisableNoteColorOnGameobject>(); if (!colorDisabled && renderer.material.shader.name.ToLower() == "custom/notehd") // only get the replaced note shader { rendererList.Add(renderer); } } if (rendererList.Count > 0) { MaterialPropertyBlockController newController = gameObject.AddComponent <MaterialPropertyBlockController>(); ReflectionUtil.SetField <MaterialPropertyBlockController, Renderer[]>(newController, "_renderers", rendererList.ToArray()); } }
/// <summary> /// Colorize a Note based on a ColorManager and CustomNote configuration /// </summary> /// <param name="color">Color</param> /// <param name="colorStrength">Color strength</param> /// <param name="noteObject">Note to colorize</param> public static void ColorizeCustomNote(Color color, float colorStrength, GameObject noteObject) { if (!noteObject || color == null) { return; } Color noteColor = color * colorStrength; IEnumerable <Transform> childTransforms = noteObject.GetComponentsInChildren <Transform>(); foreach (Transform childTransform in childTransforms) { DisableNoteColorOnGameobject colorDisabled = childTransform.GetComponent <DisableNoteColorOnGameobject>(); if (!colorDisabled) { Renderer childRenderer = childTransform.GetComponent <Renderer>(); if (childRenderer) { childRenderer.material.SetColor("_Color", noteColor); } } } }
public static void Postfix(ref ColorNoteVisuals __instance, NoteController noteController, ref MeshRenderer ____arrowMeshRenderer, ref SpriteRenderer ____arrowGlowSpriteRenderer, ref SpriteRenderer ____circleGlowSpriteRenderer, ref float ____arrowGlowIntensity, ref MaterialPropertyBlockController[] ____materialPropertyBlockControllers, ref int ____colorID, ref ColorManager ____colorManager) { try { var noteMesh = noteController.gameObject.GetComponentInChildren <MeshRenderer>(); // noteMesh.enabled = true; CustomNote activeNote = Plugin.customNotes[Plugin.selectedNote]; Transform child = noteController.gameObject.transform.Find("NoteCube"); GameObject.Destroy(child.Find("customNote")?.gameObject); if (activeNote.path != "DefaultNotes") { GameObject customNote; switch (noteController.noteData.noteType) { case NoteType.NoteA: if (noteController.noteData.cutDirection == NoteCutDirection.Any) { customNote = activeNote.noteDotLeft ?? activeNote.noteLeft; } else { customNote = activeNote.noteLeft; } break; case NoteType.NoteB: if (noteController.noteData.cutDirection == NoteCutDirection.Any) { customNote = activeNote.noteDotRight ?? activeNote.noteRight; } else { customNote = activeNote.noteRight; } break; default: return; } noteMesh.enabled = false; if (activeNote.noteDescriptor.UsesNoteColor) { Color noteColor = ____colorManager.ColorForNoteType(noteController.noteData.noteType) * activeNote.noteDescriptor.NoteColorStrength; for (int i = 0; i < customNote.GetComponentsInChildren <Transform>().Length; i++) { DisableNoteColorOnGameobject colorDisabled = customNote.GetComponentsInChildren <Transform>()[i].GetComponent <DisableNoteColorOnGameobject>(); if (!colorDisabled) { Renderer childRenderer = customNote.GetComponentsInChildren <Transform>()[i].GetComponent <Renderer>(); if (childRenderer) { childRenderer.material.SetColor("_Color", noteColor); } } } } if (activeNote.noteDescriptor.DisableBaseNoteArrows) { ____arrowMeshRenderer.enabled = false; ____arrowGlowSpriteRenderer.enabled = false; ____circleGlowSpriteRenderer.enabled = false; // if (noteController.noteData.cutDirection != NoteCutDirection.Any) // noteController.gameObject.transform.Find("NoteCube").Find("NoteArrow").GetComponent<MeshRenderer>().enabled = false; // noteController.gameObject.transform.Find("NoteCube").Find("NoteArrowGlow").GetComponent<SpriteRenderer>().enabled = false; // noteController.gameObject.transform.Find("NoteCube").Find("NoteCircleGlow").GetComponent<SpriteRenderer>().enabled = false; } GameObject fakeMesh = GameObject.Instantiate(customNote); fakeMesh.name = "customNote"; fakeMesh.transform.SetParent(child); fakeMesh.transform.localPosition = new Vector3(0.0f, 0.0f, 0.0f); fakeMesh.transform.localScale = new Vector3(0.4f, 0.4f, 0.4f); fakeMesh.transform.Rotate(new Vector3(0, 0, 0), Space.Self); /*var field = ____colorManager.GetType().GetField("_colorA", BindingFlags.Instance | BindingFlags.NonPublic); * var leftColor = field.GetValue(____colorManager); * var field2 = ____colorManager.GetType().GetField("_colorB", BindingFlags.Instance | BindingFlags.NonPublic); * var rightColor = field2.GetValue(____colorManager); */ } } catch (Exception err) { Logger.log.Error(err); } }