Exemple #1
0
        public override bool PEGI()
        {
            bool changed = false;

            changed |= "Edge Strength: ".edit(ref edgeValue).nl();
            changed |= "Also do color".toggle(ref AlsoDoColor).nl();

            if (AlsoDoColor)
            {
                changed |= GlobalBrush.ColorSliders_PEGI().nl();
            }

            if (EditedMesh.submeshCount > 1 && "Apply To Lines between submeshes".Click().nl())
            {
                LinesBetweenSubmeshes();
            }

            if (PEGIdelegates != null)
            {
                foreach (pegi.CallDelegate d in PEGIdelegates.GetInvocationList())
                {
                    changed |= d();
                }
            }

            //if (meshMGMT.target != null && meshMGMT.target.isAtlased())

            "Flexible Edge".toggle("Edge type can be seen in Packaging profile (if any). Only Bevel shader doesn't have a Flexible edge.", 90, ref editingFlexibleEdge);

            return(changed);
        }
Exemple #2
0
        public override bool PEGI()
        {
            var col = GlobalBrush.colorLinear.ToGamma();
            var msk = GlobalBrush.mask;

            if ("Paint All".Click().nl())
            {
                foreach (var v in EditedMesh.meshPoints)
                {
                    msk.Transfer(ref v.shadowBake, col);
                }
                EditedMesh.Dirty = true;
            }
            GlobalBrush.ColorSliders_PEGI().nl();

            var mat = InspectedPainter.Material;

            if (mat != null)
            {
                ShadowVolumeTexture shadVT = null;

                foreach (var vt in VolumeTexture.all)
                {
                    if (vt.GetType() == typeof(ShadowVolumeTexture) && vt.materials.Contains(mat))
                    {
                        shadVT = (ShadowVolumeTexture)vt;
                    }
                }

                if (shadVT != null && "Auto Raycast Shadows".Click().nl())
                {
                    foreach (var v in EditedMesh.meshPoints)
                    {
                        var vpos = v.WorldPos + v.GetWorldNormal() * 0.001f;

                        for (int i = 0; i < 3; i++)
                        {
                            var pnt = shadVT.lights.GetLight(i);
                            if (pnt != null)
                            {
                                //Vector3 ray = pnt.transform.position - vpos;
                                v.shadowBake[i] = pnt.transform.position.RaycastGotHit(vpos) ? 0.6f : 0;

                                //Physics.Raycast(new Ray(vpos, ray), ray.magnitude) ? 1 : 0;
                            }
                        }
                    }

                    EditedMesh.Dirty = true;

                    "Raycast Complete".showNotification();
                }
            }
            return(false);
        }
Exemple #3
0
        public override bool Inspect()
        {
            var changed = false;

            "Edge Strength: ".edit(ref _edgeValue).nl(ref changed);
            "Also do color".toggle(ref _alsoDoColor).nl(ref changed);

            if (_alsoDoColor)
            {
                GlobalBrush.ColorSliders().nl(ref changed);
            }

            "Flexible Edge".toggleIcon("Edge type can be seen in Packaging profile (if any). Currently only Bevel shader doesn't have a Flexible edge.", ref _editingFlexibleEdge);

            return(changed);
        }
Exemple #4
0
        private void DecodeStroke(string tg, CfgData data)
        {
            switch (tg)
            {
            case "trg": currentlyDecodedPainter.UpdateOrSetTexTarget(data.Equals("C") ? TexTarget.Texture2D : TexTarget.RenderTexture); break;

            case "brush":
                GlobalBrush.DecodeFull(data);
                GlobalBrush.brush2DRadius *= parentMeta?.width ?? 256; break;

            case "s":
                currentlyDecodedPainter.stroke.DecodeFull(data);
                GlobalBrush.Paint(currentlyDecodedPainter.PaintCommand);
                break;
            }
        }
Exemple #5
0
        public CfgEncoder EncodeStroke(PlaytimePainter painter)
        {
            var encoder = new CfgEncoder();

            var stroke = painter.stroke;

            if (stroke.MouseDownEvent)
            {
                encoder.Add("brush", GlobalBrush.EncodeStrokeFor(painter)) // Brush is unlikely to change mid stroke
                .Add_String("trg", parentMeta.TargetIsTexture2D() ? "C" : "G");
            }

            encoder.Add("s", stroke.Encode(parentMeta.TargetIsRenderTexture() && painter.Is3DBrush()));

            return(encoder);
        }
Exemple #6
0
        public override bool Inspect()
        {
            var col = GlobalBrush.Color;
            var msk = GlobalBrush.mask;

            if ("Paint All".Click().nl())
            {
                foreach (var v in EditedMesh.meshPoints)
                {
                    msk.SetValuesOn(ref v.shadowBake, col);
                }
                EditedMesh.Dirty = true;
            }
            GlobalBrush.ColorSliders().nl();

            /*var mat = InspectedPainter.Material;
             *
             * if (mat)
             * {
             *  ShadowVolumeTexture shadVT = null;
             *
             *  foreach (var vt in VolumeTexture.all)
             *      if (vt.GetType() == typeof(ShadowVolumeTexture) && vt.materials.Contains(mat)) shadVT = (ShadowVolumeTexture)vt;
             *
             *  if (shadVT && "Auto RayCast Shadows".Click().nl()) {
             *
             *      foreach (var v in EditedMesh.meshPoints) {
             *
             *          var vpos = v.WorldPos + v.GetWorldNormal() * 0.001f;
             *
             *          for (int i = 0; i < 3; i++)
             *          {
             *              var pnt = shadVT.lights.GetLight(i);
             *              if (pnt)
             *                  v.shadowBake[i] = pnt.transform.position.RayCast(vpos) ? 0.6f : 0;
             *
             *          }
             *      }
             *
             *      EditedMesh.Dirty = true;
             *
             *      "Ray Cast Complete".showNotificationIn3D_Views();
             *  }
             * }*/
            return(false);
        }
Exemple #7
0
        private bool DecodeStroke(string tg, string data)
        {
            switch (tg)
            {
            case "trg": currentlyDecodedPainter.UpdateOrSetTexTarget(data.Equals("C") ? TexTarget.Texture2D : TexTarget.RenderTexture); break;

            case "brush":
                GlobalBrush.Decode(data);
                GlobalBrush.brush2DRadius *= parentMeta?.width ?? 256; break;

            case "s":
                currentlyDecodedPainter.stroke.Decode(data);
                GlobalBrush.Paint(currentlyDecodedPainter.PaintCommand);
                break;

            default: return(false);
            }
            return(true);
        }
Exemple #8
0
        public override bool BrushConfigPEGI()
        {
            var changed = false;
            var p       = PlaytimePainter.inspected;

            if (p.IsUiGraphicPainter)
            {
                var gr = p.uiGraphic;

                if (!gr.raycastTarget)
                {
                    "Raycast target on UI is disabled, enable for painting".writeWarning();
                    if ("Enable Raycasts on UI".Click().nl())
                    {
                        gr.raycastTarget = true;
                    }
                }

                if (p.TexMeta.TargetIsRenderTexture())
                {
                    var prop = p.GetMaterialTextureProperty();

                    if (textureName.Equals(prop) && p.NotUsingPreview)
                    {
                        "Image element can't use Render Texture as sprite. Switch to preview. Sprite will be updated when switching to CPU"
                        .writeWarning();
                    }

                    if (GlobalBrush.GetBrushType(false) == BrushTypes.Sphere.Inst)
                    {
                        "Brush sphere doesn't work with UI.".writeWarning();
                    }
                }
            }

            return(changed);
        }
Exemple #9
0
        public override void OnPaintingDrag(PlaytimePainter painter)
        {
            if (!recording)
            {
                return;
            }

            var stroke = painter.stroke;

            if (stroke.MouseDownEvent)
            {
                _prevDir    = Vector2.zero;
                _prevPosDir = Vector3.zero;
            }

            var canRecord = stroke.MouseDownEvent || stroke.MouseUpEvent;

            var worldSpace = painter.Is3DBrush();

            if (!canRecord)
            {
                var size = GlobalBrush.Size(worldSpace);

                if (worldSpace)
                {
                    var dir = stroke.posTo - _lastPos;

                    var dot = Vector3.Dot(dir.normalized, _prevPosDir);

                    canRecord |= (_strokeDistance > size * 10) ||
                                 ((dir.magnitude > size * 0.01f) && (_strokeDistance > size) && (dot < 0.9f));

                    var fullDist = _strokeDistance + dir.magnitude;

                    _prevPosDir = (_prevPosDir * _strokeDistance + dir).normalized;

                    _strokeDistance = fullDist;
                }
                else
                {
                    size /= parentMeta.width;

                    var dir = stroke.uvTo - _lastUv;

                    var dot = Vector2.Dot(dir.normalized, _prevDir);

                    canRecord |= (_strokeDistance > size * 5) ||
                                 (_strokeDistance * parentMeta.width > 10) ||
                                 ((dir.magnitude > size * 0.01f) && (dot < 0.8f));


                    var fullDist = _strokeDistance + dir.magnitude;

                    _prevDir = (_prevDir * _strokeDistance + dir).normalized;

                    _strokeDistance = fullDist;
                }
            }

            if (canRecord)
            {
                var hold   = stroke.uvTo;
                var holdV3 = stroke.posTo;

                if (!stroke.MouseDownEvent)
                {
                    stroke.uvTo  = _lastUv;
                    stroke.posTo = _lastPos;
                }

                _strokeDistance = 0;

                var data = EncodeStroke(painter).ToString();
                recordedStrokes.Add(data);
                recordedStrokesForUndoRedo.Add(data);

                if (!stroke.MouseDownEvent)
                {
                    stroke.uvTo  = hold;
                    stroke.posTo = holdV3;
                }
            }

            _lastUv  = stroke.uvTo;
            _lastPos = stroke.posTo;
        }