private static void SetupUDN(UnityDisplayNode udn, ModDisplay modDisplay, Action <UnityDisplayNode> onComplete)
        {
            udn.name = modDisplay.Id + "(Clone)";
            udn.RecalculateGenericRenderers();
            try
            {
                modDisplay.ModifyDisplayNode(udn);
            }
            catch (Exception e)
            {
                MelonLogger.Error($"Failed to modify DisplayNode for {modDisplay.Name}");
                MelonLogger.Error(e);
            }

            try
            {
                if (modDisplay.Scale < 1f || modDisplay.Scale > 1f)
                {
                    udn.transform.GetChild(0).transform.localScale = new Vector3(modDisplay.Scale,
                                                                                 modDisplay.Scale, modDisplay.Scale);
                }
            }
            catch (Exception e)
            {
                MelonLogger.Error($"Failed to change scale for {modDisplay.Name}");
                MelonLogger.Error(e);
            }

            udn.RecalculateGenericRenderers();

            onComplete.Invoke(udn);

            ResourceHandler.Prefabs[modDisplay.Id] = udn;
        }
Example #2
0
        /// <summary>
        /// Gets all generic renderers of the specified type, recalculating the renderers if need be
        /// </summary>
        /// <param name="node">The UnityDisplayNode</param>
        /// <param name="recalculate">Whether to recalculate renderers</param>
        /// <typeparam name="T">The type of Renderer you're looking for</typeparam>
        /// <returns></returns>
        public static List <T> GetRenderers <T>(this UnityDisplayNode node, bool recalculate = true) where T : Renderer
        {
            if (node.genericRenderers == null)
            {
                return(new List <T>());
            }

            if (recalculate && node.genericRenderers[0] == null)
            {
                node.RecalculateGenericRenderers();
            }

            return(node.genericRenderers.GetItemsOfType <Renderer, T>().ToList());
        }
Example #3
0
        /// <summary>
        /// Gets all renderers that are of type SkinnedMeshRenderer or MeshRenderer
        /// </summary>
        /// <param name="node"></param>
        /// <param name="recalculate"></param>
        /// <returns></returns>
        public static List <Renderer> GetMeshRenderers(this UnityDisplayNode node, bool recalculate = true)
        {
            if (node.genericRenderers == null)
            {
                return(new List <Renderer>());
            }

            if (recalculate && node.genericRenderers[0] == null)
            {
                node.RecalculateGenericRenderers();
            }

            return(node.genericRenderers.Where(nodeGenericRenderer =>
                                               nodeGenericRenderer.IsType <SkinnedMeshRenderer>() || nodeGenericRenderer.IsType <MeshRenderer>())
                   .ToList());
        }