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); }
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); }
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); }
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; } }
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); }
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); }
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); }
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); }
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; }