You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
149 lines
3.6 KiB
C#
149 lines
3.6 KiB
C#
/******************************************************************************/
|
|
/*
|
|
Project - MudBun
|
|
Publisher - Long Bunny Labs
|
|
http://LongBunnyLabs.com
|
|
Author - Ming-Lun "Allen" Chou
|
|
http://AllenChou.net
|
|
*/
|
|
/******************************************************************************/
|
|
|
|
using UnityEditor;
|
|
using UnityEngine;
|
|
|
|
namespace MudBun
|
|
{
|
|
[CustomEditor(typeof(MudBrush), true)]
|
|
[CanEditMultipleObjects]
|
|
public class MudBrushEditor : MudEditorBase
|
|
{
|
|
public override void OnInspectorGUI()
|
|
{
|
|
if (targets.Length > 1)
|
|
{
|
|
Header("* Multiple Brushes Selected *");
|
|
}
|
|
else
|
|
{
|
|
Header("Utilities");
|
|
|
|
var brush = (MudBrush) target;
|
|
var renderer = brush.Renderer;
|
|
|
|
if (GUILayout.Button("Select Renderer"))
|
|
{
|
|
if (renderer != null)
|
|
{
|
|
Selection.activeGameObject = renderer.gameObject;
|
|
return;
|
|
}
|
|
}
|
|
|
|
{
|
|
var t = brush.transform.parent;
|
|
while (t != null)
|
|
{
|
|
var group = t.GetComponent<MudBrushGroup>();
|
|
if (group != null)
|
|
{
|
|
if (GUILayout.Button("Select Brush Group"))
|
|
{
|
|
Selection.activeGameObject = group.gameObject;
|
|
return;
|
|
}
|
|
}
|
|
|
|
t = t.parent;
|
|
}
|
|
}
|
|
|
|
if (GUILayout.Button("Flip X"))
|
|
{
|
|
var transformToFlip = brush.GetFlipXTransforms();
|
|
var aFlippedTransform = new Transform[transformToFlip.Count];
|
|
transformToFlip.CopyTo(aFlippedTransform, 0);
|
|
Undo.RecordObjects(aFlippedTransform, "Flip X");
|
|
|
|
brush.FlipX();
|
|
}
|
|
|
|
if (GUILayout.Button("Duplicate"))
|
|
{
|
|
var duplicateGo = Instantiate(brush.gameObject);
|
|
duplicateGo.transform.SetParent(brush.transform.parent);
|
|
duplicateGo.transform.SetSiblingIndex(brush.transform.GetSiblingIndex() + 1);
|
|
Undo.RegisterCreatedObjectUndo(duplicateGo, duplicateGo.name);
|
|
Selection.activeGameObject = duplicateGo;
|
|
}
|
|
}
|
|
|
|
Space();
|
|
|
|
Header("Brush Parameters");
|
|
|
|
base.OnInspectorGUI();
|
|
}
|
|
|
|
public Aabb GetChildBounds(Transform t)
|
|
{
|
|
Aabb bounds = Aabb.Empty;
|
|
GetChildBounds(t, ref bounds);
|
|
return bounds;
|
|
}
|
|
|
|
private void GetChildBounds(Transform t, ref Aabb bounds)
|
|
{
|
|
if (t == null)
|
|
return;
|
|
|
|
var renderer = t.GetComponent<MudRenderer>();
|
|
if (renderer != null)
|
|
return;
|
|
|
|
var brush = t.GetComponent<MudBrush>();
|
|
if (brush != null)
|
|
bounds.Include(brush.BoundsRs);
|
|
|
|
for (int i = 0; i < t.childCount; ++i)
|
|
GetChildBounds(t.GetChild(i), ref bounds);
|
|
}
|
|
|
|
public bool HasFrameBounds()
|
|
{
|
|
var brush = (MudBrush) target;
|
|
|
|
if (brush is MudBrushGroup)
|
|
{
|
|
Aabb bounds = GetChildBounds(brush.transform);
|
|
if (bounds.IsEmpty)
|
|
return false;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
public Bounds OnGetFrameBounds()
|
|
{
|
|
var brush = (MudBrush) target;
|
|
var renderer = brush.Renderer;
|
|
if (renderer == null)
|
|
return new Bounds(brush.transform.position, Vector3.one);
|
|
|
|
var bounds = brush.BoundsRs;
|
|
|
|
if (brush is MudBrushGroup)
|
|
{
|
|
bounds = GetChildBounds(brush.transform);
|
|
if (bounds.IsEmpty)
|
|
return new Bounds(brush.transform.position, Vector3.one);
|
|
}
|
|
|
|
bounds.Expand(renderer.SurfaceShift);
|
|
bounds.Transform(renderer.transform);
|
|
|
|
return new Bounds(bounds.Center, bounds.Size);
|
|
}
|
|
}
|
|
}
|
|
|