void DoEmitterGUI()
{
MBEmitter em = (SelectedObject is MBEmitter) ? SelectedObject as MBEmitter: (SelectedObject as MBParameter).ParentEmitter;
if (!em) return;
if (mEmitterTypeHandler == null)
InstantiateEMTypeHandler();
EditorGUILayout.BeginHorizontal();
GUI.backgroundColor = mEMGuiButton[0] ? mColOverviewSelected : mColDefault;
if (GUILayout.Button(new GUIContent("Emittertype/Image"))) {
SelectEmitterTypeTab();
}
GUI.backgroundColor = mEMGuiButton[1] ? mColOverviewSelected : mColDefault;
if (GUILayout.Button(new GUIContent("Parameters"))) {
SelectParameterTab();
}
GUI.backgroundColor = mEMGuiButton[2] ? mColOverviewSelected : mColDefault;
if (GUILayout.Button(new GUIContent("Debugging"))) {
SelectDebuggingTab();
}
GUI.backgroundColor = mColDefault;
EditorGUILayout.EndHorizontal();
if (mEMGuiButton[1])
DoParameterGUI(em);
else if (mEMGuiButton[2])
DoDebuggingGUI(em);
else if (mEmitterTypeHandler != null) {
#region Emitter
// Emitter
mDetailScroll = EditorGUILayout.BeginScrollView(mDetailScroll);
EditorGUILayout.BeginVertical(GUI.skin.GetStyle("Box"));
if (DoSectionHeader(string.Format("Emittertype: ({0})", mEmitterTypeHandler.EmitterTypeInfo.Menu), mColHeader, true)) {
#region EmitterType
EditorGUILayout.BeginHorizontal();
string tempname = MBGUI.DoTextField("Name", "", em.name);
if (MBGUI.HasChanged) em.name = tempname;
if (MBGUI.DoButton("Change Type", "Replace the current EmitterType", true))
AddEmitterTypeMenu();
string lyrname = (em.Layer) ? em.Layer.name : "NONE";
if (MBGUI.DoButton("Layer: " + lyrname, "Change the current layer", true))
LayerSelectMenu();
// Only sub-emitters can be trails
bool trail = em.IsTrail;
em.IsTrail = (em.Parent is MBEmitter) ? MBGUI.DoToggle("Is Trail?", "Use this emitter as trail of its parent?", em.IsTrail) : false;
if (trail != em.IsTrail)
em.Position = Vector3.zero;
EditorGUILayout.EndHorizontal();
EditorGUILayout.BeginHorizontal();
em.AutoPlay = MBGUI.DoToggle("AutoPlay", "Play when Particlesystem starts playing?", em.AutoPlay);
em.AutoRepeat = MBGUI.DoToggle("AutoRepeat", "Loop emitter and ignore ParticleSystem's duration", em.AutoRepeat);
EditorGUILayout.EndHorizontal();
EditorGUILayout.BeginHorizontal();
em.Billboard = (MBBillboard)MBGUI.DoEnumField("Billboard", "Set billboarding method", em.Billboard);
EditorGUILayout.EndHorizontal();
EditorGUILayout.BeginHorizontal();
em.LaunchRateAnimated = MBGUI.DoToggle("Animate", "Animate launch rate?", em.LaunchRateAnimated);
if (em.LaunchRateAnimated) {
em.LaunchRateCurve = MBGUI.DoCurve("Launch Rate", "Launch Rate over age", em.LaunchRateCurve, em.LaunchRate, em.LaunchRate);
MBGUI.LimitCurveValue(ref em.LaunchRateCurve, 0, 99999999);
}
else {
em.LaunchRate = Mathf.Max(0, MBGUI.DoFloatField("Launch Rate", "Emission Rate in Particles/s", em.LaunchRate));
em.LaunchRandom = MBGUI.DoFloatSlider("Random %", "Random deviation from Launch rate", em.LaunchRandom, 0, 1);
}
EditorGUILayout.EndHorizontal();
EditorGUILayout.BeginHorizontal();
em.InstantLaunch = Mathf.Max(0, MBGUI.DoIntField("Instant Launch", "Instant Launch", em.InstantLaunch));
em.InstantLaunchRepeat = MBGUI.DoToggle("Repeat", "Use on AutoRepeat?", em.InstantLaunchRepeat);
em.LaunchBuffer = MBGUI.DoIntField("Buffer", "Particles spawn once LaunchRate fills the buffer", em.LaunchBuffer);
EditorGUILayout.EndHorizontal();
// EmitterType-GUI
mEmitterTypeHandler.OnGUI();
mEmitterTypeHandler.Target.Validate();
#endregion
}
EditorGUILayout.EndVertical();
if (DoSectionHeader("Texture(s)", mColHeader, true)) {
EditorGUILayout.BeginHorizontal();
Vector2 oldPivot = em.ImagePivot;
em.ImagePivot.x = MBGUI.DoFloatSlider("Image-Pivot X", "Image Handle Offset", em.ImagePivot.x, -1, 1);
em.ImagePivot.y = MBGUI.DoFloatSlider("Image-Pivot Y", "Image Handle Offset", em.ImagePivot.y, -1, 1);
if ((em.ImagePivot - oldPivot).sqrMagnitude > 0)
em.mbInitializeQuad();
EditorGUILayout.EndHorizontal();
EditorGUILayout.BeginHorizontal();
MBGUI.DoLabel(em.Textures.Count + " Frame(s)");
if (MBGUI.DoButton("Add Frame(s)", "Add selected textures from your Project to this emitter", Selection.activeObject is Texture)) {
List<Texture2D> files = MBUtility.GetAll<Texture2D>(Selection.objects);
files.Sort(delegate(Texture2D a, Texture2D b) { return a.name.CompareTo(b.name); });
MBEditorUtility.MakeTexturesReadable(files.ToArray());
em.Textures.AddRange(files);
SelectedParticleSystem.GenerateTextureMap(false);
}
if (MBGUI.DoButton("Remove", "Remove selected frame", em.Textures.Count > 0)) {
em.Textures.RemoveAt(mSelectedFrameIndex);
SelectedParticleSystem.GenerateTextureMap(false);
}
if (MBGUI.DoButton("Clear", "Clear all frames", em.Textures.Count > 0)) {
em.Textures.Clear();
SelectedParticleSystem.GenerateTextureMap(false);
}
EditorGUILayout.EndHorizontal();
if (em.Textures.Count < 2) {
Texture2D tex = (em.Textures.Count > 0) ? em.Textures[0] : null;
tex = EditorGUILayout.ObjectField(tex, typeof(Texture2D), false, new GUILayoutOption[] { GUILayout.ExpandWidth(false), GUILayout.Height(100), GUILayout.Width(100) }) as Texture2D;
if (tex && (em.Textures.Count == 0 || tex != em.Textures[0])) {
MBEditorUtility.MakeTexturesReadable(tex);
em.Textures = new List<Texture2D>(new Texture2D[] { tex });
SelectedParticleSystem.GenerateTextureMap(false);
}
}
else {
#region Frames
//EditorGUILayout.BeginHorizontal(GUILayout.Height(200));
mImageScroll = EditorGUILayout.BeginScrollView(mImageScroll, GUILayout.Height(140));
GUILayout.Box("", GUIStyle.none, GUILayout.Width(em.Textures.Count * 110)); // force scrolling
Rect r = new Rect(10, 0, 100, 100);
for (int i = 0; i < em.Textures.Count; i++) {
Texture2D frame = em.Textures[i];
if (frame == null) {
em.Textures.RemoveAt(i);
}
else {
EditorGUI.DrawPreviewTexture(r, frame);
if (Event.current.type == EventType.MouseDown && r.Contains(Event.current.mousePosition)) {
mSelectedFrameIndex = i;
RepaintEditor(true);
}
if (i == mSelectedFrameIndex) {
Color c = GUI.backgroundColor;
GUI.backgroundColor = new Color(1, 0, 1, 0.5f);
GUI.Box(new Rect(r.x - 3, r.y - 3, r.width + 6, r.height + 6), new GUIContent("", string.Format("{0} ({1}x{2})", frame.name, frame.width, frame.height)));
GUI.backgroundColor = c;
}
r.x += 105;
}
}
EditorGUILayout.EndScrollView();
//EditorGUILayout.EndHorizontal();
#endregion
}
}
// EVENTS
if (DoSectionHeader("Events", mColHeader, true)) {
em.ParticleBirthSM = MBGUI.DoEditorEvent("Particle Birth", "Particle Birth Event Target", em.ParticleBirthSM);
em.ParticleDeathSM = MBGUI.DoEditorEvent("Particle Death", "Particle Death Event Target", em.ParticleDeathSM);
em.EmitterStopsPlayingSM = MBGUI.DoEditorEvent("Emitter stops playing", "Emitter Stops Playing Event Target", em.EmitterStopsPlayingSM);
}
// DESCRIPTION
if (DoSectionHeader("Description", mColHeader, true)) {
EditorGUILayout.BeginVertical(GUI.skin.GetStyle("Box"));
if (string.IsNullOrEmpty(em.Description))
em.Description = "";
em.Description = EditorGUILayout.TextArea(em.Description, GUILayout.Height(100));
EditorGUILayout.EndVertical();
}
EditorGUILayout.EndScrollView();
#endregion
}
}