Exemple #1
0
        public override bool Inspect()
        {
            if (ProcessEnumerator != null)
            {
                "Running Coroutine".nl();
                _processEnumerator.Inspect_AsInList();
                return(false);
            }

            var changed = false;

            if ("CPU blit options".conditional_enter(this.TargetIsTexture2D(), ref inspectedItems, 0).nl())
            {
                "Disable Continious Lines".toggleIcon("If you see unwanted lines appearing on the texture as you paint, enable this.", ref disableContiniousLine).nl(ref changed);

                "CPU blit repaint delay".edit("Delay for video memory update when painting to Texture2D", 140, ref _repaintDelay, 0.01f, 0.5f).nl(ref changed);

                "Don't update mipMaps".toggleIcon("May increase performance, but your changes may not disaplay if you are far from texture.",
                                                  ref dontRedoMipMaps).changes(ref changed);
            }

            if ("GPU blit options".enter(ref inspectedItems, 1).nl())
            {
                "Update Texture2D after every stroke".toggleIcon(ref updateTex2DafterStroke).nl();
            }

            #region Processors

            var newWidth  = Cfg.SelectedWidthForNewTexture(); //PainterDataAndConfig.SizeIndexToSize(PainterCamera.Data.selectedWidthIndex);
            var newHeight = Cfg.SelectedHeightForNewTexture();

            if ("Texture Processors".enter(ref inspectedItems, 6).nl())
            {
                if (errorWhileReading)
                {
                    "There was en error reading texture pixels, can't process it".writeWarning();
                }
                else
                {
                    if ("Resize ({0}*{1}) => ({2}*{3})".F(width, height, newWidth, newHeight).enter(ref _inspectedProcess, 0).nl_ifFoldedOut())
                    {
                        "New Width ".select(60, ref PainterCamera.Data.selectedWidthIndex, PainterDataAndConfig.NewTextureSizeOptions).nl(ref changed);

                        "New Height ".select(60, ref PainterCamera.Data.selectedHeightIndex, PainterDataAndConfig.NewTextureSizeOptions).nl(ref changed);

                        if (newWidth != width || newHeight != height)
                        {
                            bool rescale;

                            if (newWidth <= width && newHeight <= height)
                            {
                                rescale = "Downscale".Click();
                            }
                            else if (newWidth >= width && newHeight >= height)
                            {
                                rescale = "Upscale".Click();
                            }
                            else
                            {
                                rescale = "Rescale".Click();
                            }

                            if (rescale)
                            {
                                Resize(newWidth, newHeight);
                            }
                        }
                        pegi.nl();
                    }

                    if (_inspectedProcess == -1)
                    {
                        if ((newWidth != width || newHeight != height) && icon.Size.Click("Resize").nl(ref changed))
                        {
                            Resize(newWidth, newHeight);
                        }

                        pegi.nl();
                    }

                    if ("Clear ".enter(ref _inspectedProcess, 1, false))
                    {
                        "Clear Color".edit(80, ref clearColor).nl();

                        if ("Clear Texture".Click().nl())
                        {
                            Colorize(clearColor);
                            SetApplyUpdateRenderTexture();
                        }
                    }

                    if (_inspectedProcess == -1 && icon.Refresh.Click("Apply color {0}".F(clearColor)).nl())
                    {
                        Colorize(clearColor);
                        SetApplyUpdateRenderTexture();
                    }

                    if ("Color to Alpha".enter(ref _inspectedProcess, 2).nl())
                    {
                        "Background Color".edit(80, ref clearColor).nl();
                        if (Pixels != null)
                        {
                            if ("Color to Alpha".Click("Will Convert Background Color with transparency").nl())
                            {
                                bool wasRt = WasRenderTexture();

                                for (int i = 0; i < _pixels.Length; i++)
                                {
                                    _pixels[i] = BlitFunctions.ColorToAlpha(_pixels[i], clearColor);
                                }

                                SetAndApply();

                                if (wasRt)
                                {
                                    ReturnToRenderTexture();
                                }
                            }

                            if ("Color from Alpha".Click("Will subtract background color from transparency").nl())
                            {
                                bool wasRt = WasRenderTexture();

                                for (int i = 0; i < _pixels.Length; i++)
                                {
                                    var col = _pixels[i];

                                    col.a = BlitFunctions.ColorToAlpha(_pixels[i], clearColor).a;

                                    _pixels[i] = col;
                                }

                                SetAndApply();

                                if (wasRt)
                                {
                                    ReturnToRenderTexture();
                                }
                            }
                        }
                    }

                    if ("Signed Distance Filelds generator".enter(ref _inspectedProcess, 4).nl())
                    {
                        if (texture2D.IsColorTexture())
                        {
                            "Texture is a color texture, best to switch to non-color for SDF. Save any changes first, as the texture will reimport.".writeWarning();

#if UNITY_EDITOR
                            var ai = texture2D.GetTextureImporter();

                            if (ai != null && "Convert to non-Color".ClickConfirm("SDFnc", "This will undo any unsaved changes. Proceed?") && ai.WasWrongIsColor(false))
                            {
                                ai.SaveAndReimport();
                            }
#endif
                        }

                        "Will convert black and white color to black and white signed field".nl();

                        "SDF Max Inside".edit(ref sdfMaxInside).nl();
                        "SDF Max Outside".edit(ref sdfMaxOutside).nl();
                        "SDF Post Process".edit(ref sdfPostProcessDistance).nl();

                        if ("Generate Assync".Click("Will take a bit longer but you'll be able to use Unity"))
                        {
                            bool wasRt = WasRenderTexture();

                            var p = PlaytimePainter.inspected;
                            if (p)
                            {
                                p.UpdateOrSetTexTarget(TexTarget.Texture2D);
                            }

                            _processEnumerator = QcAsync.StartManagedCoroutine(
                                DistanceFieldProcessor.Generate(this, sdfMaxInside, sdfMaxOutside,
                                                                sdfPostProcessDistance), () => {
                                SetAndApply();
                                if (wasRt)
                                {
                                    ReturnToRenderTexture();
                                }
                            });
                        }

                        pegi.nl();
                    }

                    if ("Curves".enter(ref _inspectedProcess, 5).nl())
                    {
                        var crv = TexMGMT.InspectAnimationCurve("Channel");

                        if (Pixels != null)
                        {
                            if ("Remap Alpha".Click())
                            {
                                for (int i = 0; i < _pixels.Length; i++)
                                {
                                    var col = _pixels[i];
                                    col.a      = crv.Evaluate(col.a);
                                    _pixels[i] = col;
                                }
                                SetApplyUpdateRenderTexture();
                            }

                            if ("Remap Color".Click())
                            {
                                for (int i = 0; i < _pixels.Length; i++)
                                {
                                    var col = _pixels[i];
                                    col.r      = crv.Evaluate(col.r);
                                    col.g      = crv.Evaluate(col.g);
                                    col.b      = crv.Evaluate(col.b);
                                    _pixels[i] = col;
                                }
                                SetApplyUpdateRenderTexture();
                            }
                        }
                    }

                    if ("Save Textures In Game ".enter(ref _inspectedProcess, 7).nl())
                    {
                        "This is intended to test playtime saving. The functions to do so are quite simple. You can find them inside ImageData.cs class."
                        .writeHint();

                        pegi.nl();

                        "Save Name".edit(70, ref saveName);

                        if (icon.Folder.Click("Open Folder with textures").nl())
                        {
                            QcFile.Explorer.OpenPersistentFolder(SavedImagesFolder);
                        }

                        if ("Save Playtime".Click("Will save to {0}/{1}".F(Application.persistentDataPath, saveName)).nl())
                        {
                            SaveInPlayer();
                        }

                        if (Cfg && Cfg.playtimeSavedTextures.Count > 0)
                        {
                            "Playtime Saved Textures".write_List(Cfg.playtimeSavedTextures, LoadTexturePegi);
                        }
                    }

                    if ("Fade edges".enter(ref _inspectedProcess, 8).nl())
                    {
                        ("This will cahange pixels on the edges of the texture. Useful when wrap mode " +
                         "is set to clamp.").writeHint();

                        if (texture2D)
                        {
#if UNITY_EDITOR
                            var ti = texture2D.GetTextureImporter();
                            if (ti)
                            {
                                if (ti.wrapMode != TextureWrapMode.Clamp && "Change wrap mode from {0} to Clamp"
                                    .F(ti.wrapMode).Click().nl(ref changed))
                                {
                                    ti.wrapMode = TextureWrapMode.Clamp;
                                    ti.SaveAndReimport();
                                }
                            }
#endif

                            if ("Set edges to transparent".Click().nl(ref changed))
                            {
                                SetEdges(Color.clear, ColorMask.A);
                                SetAndApply();
                            }

                            if ("Set edges to Clear Black".Click().nl(ref changed))
                            {
                                SetEdges(Color.clear);
                                SetAndApply();
                            }
                        }
                    }

                    if ("Add Background".enter(ref _inspectedProcess, 9).nl())
                    {
                        "Background Color".edit(80, ref clearColor).nl();

                        if ("Add Background".Click("Will Add Beckground color and make everything non transparent").nl())
                        {
                            bool wasRt = WasRenderTexture();

                            for (int i = 0; i < _pixels.Length; i++)
                            {
                                _pixels[i] = BlitFunctions.AddBackground(_pixels[i], clearColor);
                            }

                            SetAndApply();

                            if (wasRt)
                            {
                                ReturnToRenderTexture();
                            }
                        }
                    }

                    if ("Offset".enter(ref _inspectedProcess, 10).nl())
                    {
                        "X:".edit(ref _offsetByX);

                        if ((_offsetByX != width / 2) && "{0}/{1}".F(width / 2, width).Click())
                        {
                            _offsetByX = width / 2;
                        }

                        pegi.nl();

                        "Y:".edit(ref _offsetByY);

                        if ((_offsetByY != height / 2) && "{0}/{1}".F(height / 2, height).Click())
                        {
                            _offsetByY = height / 2;
                        }

                        pegi.nl();

                        if (((_offsetByX % width != 0) || (_offsetByY % height != 0)) && "Apply Offset".Click())
                        {
                            OffsetPixels();
                            SetAndApply();
                        }
                    }
                }
            }

            #endregion

            if ("Enable Undo for '{0}'".F(NameForPEGI).toggle_enter(ref enableUndoRedo, ref inspectedItems, 2, ref changed).nl())
            {
                "UNDOs: Tex2D".edit(80, ref _numberOfTexture2DBackups).changes(ref changed);
                "RendTex".edit(60, ref _numberOfRenderTextureBackups).nl(ref changed);

                "Backup manually".toggleIcon(ref backupManually).nl();

                if (_numberOfTexture2DBackups > 50 || _numberOfRenderTextureBackups > 50)
                {
                    "Too big of a number will eat up lot of memory".writeWarning();
                }

                "Creating more backups will eat more memory".writeOneTimeHint("backupIsMem");
                "This are not connected to Unity's Undo/Redo because when you run out of backups you will by accident start undoing other operations.".writeOneTimeHint("noNativeUndo");
                "Use Z/X to undo/redo".writeOneTimeHint("ZxUndoRedo");
            }

            if (inspectedItems == -1)
            {
                if (isAVolumeTexture)
                {
                    "Is A volume texture".toggleIcon(ref isAVolumeTexture).nl(ref changed);
                }
            }

            return(changed);
        }