Skip to content

Commit

Permalink
feat: add ignoreSelf and ignoreChildren options for source
Browse files Browse the repository at this point in the history
  • Loading branch information
mob-sakai committed Nov 11, 2023
1 parent c145db4 commit 2f8ccfb
Show file tree
Hide file tree
Showing 2 changed files with 39 additions and 11 deletions.
7 changes: 3 additions & 4 deletions Packages/src/Runtime/CompositeCanvasRenderer.cs
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,6 @@ namespace CompositeCanvas
[RequireComponent(typeof(CanvasRenderer))]
public class CompositeCanvasRenderer : MaskableGraphic
{
internal const HideFlags k_Temporary = HideFlags.DontSave | HideFlags.NotEditable;

private static readonly string[][] s_ColorModeKeywords =
{
Array.Empty<string>(),
Expand Down Expand Up @@ -285,7 +283,7 @@ protected override void OnEnable()
Profiler.EndSample();

Profiler.BeginSample("(CCR)[CompositeCanvasRenderer] OnEnable > Add source component to children");
this.AddComponentOnChildren<CompositeCanvasSource>(k_Temporary, false);
this.AddComponentOnChildren<CompositeCanvasSource>(HideFlags.DontSave, false);
Profiler.EndSample();

if (!showSourceGraphics)
Expand Down Expand Up @@ -333,7 +331,7 @@ protected override void OnDestroy()

private void OnTransformChildrenChanged()
{
this.AddComponentOnChildren<CompositeCanvasSource>(k_Temporary, false);
this.AddComponentOnChildren<CompositeCanvasSource>(HideFlags.DontSave, false);
}

protected override void UpdateMaterial()
Expand Down Expand Up @@ -660,6 +658,7 @@ private void Bake()
for (var i = 0; i < sources.Count; i++)
{
if (!sources[i]) continue;
if (sources[i].ignored) continue;
sources[i].Bake(_cb);
}

Expand Down
43 changes: 36 additions & 7 deletions Packages/src/Runtime/CompositeCanvasSource.cs
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,12 @@ public class CompositeCanvasSource : UIBehaviour, IMeshModifier, IMaterialModifi
x => x != null,
x => x.Clear());

[SerializeField]
private bool m_IgnoreSelf;

[SerializeField]
private bool m_IgnoreChildren;

private Action _checkRenderColor;
private Color _color;
private Graphic _graphic;
Expand All @@ -41,12 +47,30 @@ public Graphic graphic
}
}

protected override void OnEnable()
public bool ignored
{
Profiler.BeginSample("(CCR)[CompositeCanvasSource] OnEnable > Set hideFlags");
hideFlags = CompositeCanvasRenderer.k_Temporary;
Profiler.EndSample();
get
{
if (m_IgnoreSelf || !_renderer) return true;

var rendererTr = _renderer.transform;
var tr = transform.parent;
while (tr && tr != rendererTr)
{
if (tr.TryGetComponent<CompositeCanvasSource>(out var source) && source.m_IgnoreChildren)
{
return true;
}

tr = tr.parent;
}

return false;
}
}

protected override void OnEnable()
{
Profiler.BeginSample("(CCR)[CompositeCanvasSource] OnEnable > Register onBeforeCanvasRebuild");
_checkRenderColor = _checkRenderColor ?? CheckRenderColor;
UIExtraCallbacks.onBeforeCanvasRebuild += _checkRenderColor;
Expand All @@ -67,7 +91,7 @@ protected override void OnEnable()
UpdateRenderer();

Profiler.BeginSample("(CCR)[CompositeCanvasSource] OnEnable > AddComponentOnChildren");
this.AddComponentOnChildren<CompositeCanvasSource>(CompositeCanvasRenderer.k_Temporary, false);
this.AddComponentOnChildren<CompositeCanvasSource>(HideFlags.DontSave, false);
Profiler.EndSample();
}

Expand Down Expand Up @@ -108,7 +132,7 @@ protected override void OnRectTransformDimensionsChange()

private void OnTransformChildrenChanged()
{
this.AddComponentOnChildren<CompositeCanvasSource>(CompositeCanvasRenderer.k_Temporary, false);
this.AddComponentOnChildren<CompositeCanvasSource>(HideFlags.DontSave, false);
}

protected override void OnTransformParentChanged()
Expand All @@ -120,8 +144,13 @@ protected override void OnTransformParentChanged()
#if UNITY_EDITOR
protected override void OnValidate()
{
hideFlags = m_IgnoreSelf || m_IgnoreChildren ? HideFlags.None : HideFlags.DontSave;
base.OnValidate();
SetRendererDirty();
if (_graphic)
{
_graphic.SetMaterialDirty();
}
}
#endif

Expand All @@ -130,7 +159,7 @@ Material IMaterialModifier.GetModifiedMaterial(Material baseMaterial)
if (!isActiveAndEnabled
|| !graphic
|| !_renderer || !_renderer.isActiveAndEnabled || _renderer.showSourceGraphics
|| _isBaking)
|| _isBaking || ignored)
{
return baseMaterial;
}
Expand Down

0 comments on commit 2f8ccfb

Please sign in to comment.