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(); } }
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); }
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); }
public void UpdateMaterial() { material = P3dHelper.GetMaterial(gameObject, slot.Index); materialSet = true; }
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."); }
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(); } }
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(); } }
public Material FindMaterial(GameObject gameObject) { return(P3dHelper.GetMaterial(gameObject, Index)); }
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(); }