MBEditor.DoEmitterGUI C# (CSharp) Méthode

DoEmitterGUI() private méthode

private DoEmitterGUI ( ) : void
Résultat void
    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
        }
    }