Esempio n. 1
0
        public Texture FindTexture(GameObject gameObject)
        {
            var material = P3dHelper.GetMaterial(gameObject, Index);

            if (material != null)
            {
                return(material.GetTexture(Name));
            }

            return(null);
        }
        protected override void OnInspector()
        {
            if (All(t => t.Activated == true))
            {
                EditorGUILayout.HelpBox("This component has already activated.", MessageType.Info);
            }

            if (Any(t => t.Activated == false))
            {
                BeginError(Any(t => t.Index < 0 || t.Index >= t.GetComponent <Renderer>().sharedMaterials.Length));
                DrawDefault("index", "The material index that will be cloned. This matches the Materials list in your MeshRenderer/SkinnedMeshRenderer, where 0 is the first material.");
                EndError();
                BeginDisabled();
                EditorGUILayout.ObjectField("Material", P3dHelper.GetMaterial(Target.gameObject, Target.Index), typeof(Material), false);
                EndDisabled();
            }
        }
Esempio n. 3
0
        public Texture FindTexture(GameObject gameObject)
        {
            if (gameObject != null)
            {
                var paintable = gameObject.GetComponentInParent <P3dPaintable>();

                if (paintable != null)
                {
                    var material = P3dHelper.GetMaterial(paintable.CachedRenderer, Index);

                    if (material != null && material.HasProperty(Name) == true)
                    {
                        return(material.GetTexture(Name));
                    }
                }
            }

            return(null);
        }
Esempio n. 4
0
        public bool IsTransformed(GameObject gameObject)
        {
            if (gameObject != null)
            {
                var paintable = gameObject.GetComponentInParent <P3dPaintable>();

                if (paintable != null)
                {
                    var material = P3dHelper.GetMaterial(paintable.CachedRenderer, Index);

                    if (material != null)
                    {
                        if (material.GetTextureScale(Name) != Vector2.one || material.GetTextureOffset(Name) != Vector2.zero)
                        {
                            return(true);
                        }
                    }
                }
            }

            return(false);
        }
Esempio n. 5
0
 public void UpdateMaterial()
 {
     material    = P3dHelper.GetMaterial(gameObject, slot.Index);
     materialSet = true;
 }
Esempio n. 6
0
        protected override void OnInspector()
        {
            if (Any(t => t.Activated == true))
            {
                EditorGUILayout.HelpBox("This component has been activated.", MessageType.Info);
            }

            BeginError(Any(t => t.Index < 0 || t.Index >= t.GetComponent <Renderer>().sharedMaterials.Length));
            DrawExpand(ref expandIndex, "index", "The material index that will be cloned. This matches the Materials list in your MeshRenderer/SkinnedMeshRenderer, where 0 is the first material.");
            EndError();
            if (expandIndex == true)
            {
                BeginIndent();
                BeginDisabled();
                EditorGUILayout.ObjectField(new GUIContent("Material", "This is the current material at the specified material index."), P3dHelper.GetMaterial(Target.gameObject, Target.Index), typeof(Material), false);
                EndDisabled();
                EndIndent();
            }
            Draw("copySplatData", "If this material is a splat map, then enabling this will automatically copy data from material 0.");
        }
Esempio n. 7
0
        public override void OnGUI(Rect position, SerializedProperty property, GUIContent label)
        {
            var sObj      = property.serializedObject;
            var sIdx      = property.FindPropertyRelative("Index");
            var sNam      = property.FindPropertyRelative("Name");
            var rectA     = position; rectA.width = EditorGUIUtility.labelWidth;
            var rectB     = position; rectB.xMin += EditorGUIUtility.labelWidth; rectB.width = 20;
            var rectC     = position; rectC.xMin += EditorGUIUtility.labelWidth; rectC.xMin += 22; rectC.width -= 20;
            var rectD     = position; rectD.xMin = rectD.xMax - 18;
            var component = property.serializedObject.targetObject as Component;
            var paintable = component != null?component.GetComponentInParent <P3dPaintable>() : null;

            var missing = true;

            // Valid slot?
            if (paintable != null)
            {
                var material = P3dHelper.GetMaterial(paintable.CachedRenderer, sIdx.intValue);

                if (material != null && P3dHelper.TexEnvNameExists(material.shader, sNam.stringValue) == true)
                {
                    missing = false;
                }
            }

            P3dEditor.BeginError(missing);
            {
                EditorGUI.LabelField(rectA, label);

                sObj.Update();

                sIdx.intValue    = Mathf.Clamp(EditorGUI.IntField(rectB, sIdx.intValue), 0, 99);
                sNam.stringValue = EditorGUI.TextField(rectC, sNam.stringValue);

                sObj.ApplyModifiedProperties();

                // Draw menu
                if (GUI.Button(rectD, "", EditorStyles.popup) == true)
                {
                    var menu = new GenericMenu();

                    if (paintable != null)
                    {
                        var materials = paintable.CachedRenderer.sharedMaterials;

                        if (materials.Length > 0)
                        {
                            for (var i = 0; i < materials.Length; i++)
                            {
                                var material     = materials[i];
                                var materialName = i.ToString();
                                var matIndex     = i;

                                if (material != null)
                                {
                                    materialName += " (" + material.name + ")";

                                    var texEnvs = P3dHelper.GetTexEnvs(material.shader);

                                    if (texEnvs != null && texEnvs.Count > 0)
                                    {
                                        foreach (var texEnv in texEnvs)
                                        {
                                            var texName  = texEnv.Name;
                                            var texTitle = texEnv.Title;
                                            var tex      = material.GetTexture(texName);

                                            if (tex != null)
                                            {
                                                texTitle += " (" + tex.name + ")";
                                            }
                                            else
                                            {
                                                texTitle += " (empty)";
                                            }

                                            menu.AddItem(new GUIContent(materialName + "/" + texTitle), sIdx.intValue == matIndex && sNam.stringValue == texName, () => { sObj.Update(); sIdx.intValue = matIndex; sNam.stringValue = texName; sObj.ApplyModifiedProperties(); });
                                        }
                                    }
                                    else
                                    {
                                        menu.AddDisabledItem(new GUIContent(materialName + "/This Material's shader has no textures!"));
                                    }
                                }
                                else
                                {
                                    menu.AddDisabledItem(new GUIContent(materialName + "/This Material is null!"));
                                }
                            }
                        }
                        else
                        {
                            menu.AddDisabledItem(new GUIContent("This GameObject has no materials!"));
                        }
                    }

                    menu.DropDown(rectD);
                }
            }
            P3dEditor.EndError();
        }
        protected override void OnInspector()
        {
            if (Any(t => t.Activated == true))
            {
                EditorGUILayout.HelpBox("This component has been activated.", MessageType.Info);
            }

            if (Any(t => t.Activated == false && t.CachedPaintable.Activated == true))
            {
                EditorGUILayout.HelpBox("This component isn't activated, but the P3dPaintable has been, so you must manually activate this.", MessageType.Warning);
            }

            BeginError(Any(t => t.Index < 0 || t.Index >= t.GetComponent <Renderer>().sharedMaterials.Length));
            DrawExpand(ref expandIndex, "index", "The material index that will be cloned. This matches the Materials list in your MeshRenderer/SkinnedMeshRenderer, where 0 is the first material.");
            EndError();
            if (expandIndex == true)
            {
                BeginIndent();
                BeginDisabled();
                EditorGUILayout.ObjectField(new GUIContent("Material", "This is the current material at the specified material index."), P3dHelper.GetMaterial(Target.gameObject, Target.Index), typeof(Material), false);
                EndDisabled();
                EndIndent();
            }
        }
Esempio n. 9
0
        protected override void OnInspector()
        {
            TARGET tgt; TARGET[] tgts; GetTargets(out tgt, out tgts);

            if (Any(tgts, t => t.Activated == true))
            {
                Info("This component has been activated.");
            }

            if (Any(tgts, t => t.Activated == true && Application.isPlaying == false))
            {
                Error("This component shouldn't be activated during edit mode. Deactivate it from the component context menu.");
            }

            if (Any(tgts, t => t.Activated == false && t.CachedPaintable.Activated == true))
            {
                Warning("This component isn't activated, but the P3dPaintable has been, so you must manually activate this.");
            }

            BeginError(Any(tgts, t => t.Index < 0 || t.Index >= t.GetComponent <Renderer>().sharedMaterials.Length));
            var showMaterial = DrawExpand("index", "The material index that will be cloned. This matches the Materials list in your MeshRenderer/SkinnedMeshRenderer, where 0 is the first material.");

            EndError();
            if (showMaterial == true)
            {
                BeginIndent();
                BeginDisabled();
                EditorGUILayout.ObjectField(new GUIContent("Material", "This is the current material at the specified material index."), P3dHelper.GetMaterial(tgt.CachedRenderer, tgt.Index), typeof(Material), false);
                EndDisabled();
                EndIndent();
            }
        }
Esempio n. 10
0
 public Material FindMaterial(GameObject gameObject)
 {
     return(P3dHelper.GetMaterial(gameObject, Index));
 }
Esempio n. 11
0
        public override void OnGUI(Rect position, SerializedProperty property, GUIContent label)
        {
            var sObj      = property.serializedObject;
            var sIdx      = property.FindPropertyRelative("Index");
            var sNam      = property.FindPropertyRelative("Name");
            var right     = position; right.xMin += EditorGUIUtility.labelWidth;
            var rightA    = new Rect(right.xMin, right.y, 20.0f, right.height);
            var rightB    = new Rect(right.xMin + 25.0f, right.y, right.width - 50.0f, right.height);
            var rightC    = new Rect(right.xMax - 20.0f, right.y, 20.0f, right.height);
            var component = property.serializedObject.targetObject as Component;
            var exists    = false;

            // Invalid slot?
            if (component != null)
            {
                var material = P3dHelper.GetMaterial(component.gameObject, sIdx.intValue);

                if (P3dHelper.TexEnvNameExists(material, sNam.stringValue) == false)
                {
                    exists = true;
                }
            }

            P3dHelper.BeginColor(exists);
            {
                EditorGUI.LabelField(position, label);

                sIdx.intValue    = Mathf.Clamp(EditorGUI.IntField(rightA, sIdx.intValue), 0, 99);
                sNam.stringValue = EditorGUI.TextField(rightB, sNam.stringValue);

                sObj.ApplyModifiedProperties();

                // Draw menu
                if (GUI.Button(rightC, "", EditorStyles.popup) == true)
                {
                    if (component != null)
                    {
                        var menu     = new GenericMenu();
                        var renderer = component.GetComponent <Renderer>();

                        if (renderer != null)
                        {
                            var materials = renderer.sharedMaterials;

                            if (materials.Length > 0)
                            {
                                for (var i = 0; i < materials.Length; i++)
                                {
                                    var material     = materials[i];
                                    var materialName = i.ToString();
                                    var matIndex     = i;

                                    if (material != null)
                                    {
                                        materialName += " (" + material.name + ")";

                                        var texEnvs = P3dHelper.GetTexEnvs(material);

                                        if (texEnvs != null && texEnvs.Count > 0)
                                        {
                                            for (var j = 0; j < texEnvs.Count; j++)
                                            {
                                                var texName  = texEnvs[j].Name;
                                                var texTitle = texName;
                                                var tex      = material.GetTexture(texName);

                                                if (tex != null)
                                                {
                                                    texTitle += " (" + tex.name + ")";
                                                }
                                                else
                                                {
                                                    texTitle += " (empty)";
                                                }

                                                menu.AddItem(new GUIContent(materialName + "/" + texTitle), sIdx.intValue == matIndex && sNam.stringValue == texName, () => { sIdx.intValue = matIndex; sNam.stringValue = texName; sObj.ApplyModifiedProperties(); });
                                            }
                                        }
                                        else
                                        {
                                            menu.AddDisabledItem(new GUIContent(materialName + "/This Material's shader has no textures!"));
                                        }
                                    }
                                    else
                                    {
                                        menu.AddDisabledItem(new GUIContent(materialName + "/This Material is null!"));
                                    }
                                }
                            }
                            else
                            {
                                menu.AddDisabledItem(new GUIContent("This GameObject has no materials!"));
                            }
                        }
                        else
                        {
                            menu.AddDisabledItem(new GUIContent("This GameObject has no renderer!"));
                        }

                        menu.DropDown(rightC);
                    }
                }
            }
            P3dHelper.EndColor();
        }