コード例 #1
0
        /// <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();
            }
        }
コード例 #2
0
        /// <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());
            }
        }
コード例 #3
0
        /// <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);
                    }
                }
            }
        }
コード例 #4
0
        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);
            }
        }