Skip to content

Commit 22cad6d

Browse files
ncerone-unityEvergreen
authored andcommitted
[Backport 6000.5] Fix badge not correctly showing after graph validation.
1 parent 5fea564 commit 22cad6d

3 files changed

Lines changed: 60 additions & 47 deletions

File tree

Packages/com.unity.shadergraph/Editor/Generation/Targets/UITK/UISubTarget.cs

Lines changed: 60 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -223,18 +223,26 @@ public string GetValidatorKey()
223223

224224
public INodeValidationExtension.Status GetValidationStatus(AbstractMaterialNode node, out string msg)
225225
{
226-
// Make sure node is in our graph first
227226
if (node.owner == null)
228227
{
229228
msg = null;
230229
return INodeValidationExtension.Status.None;
231230
}
232231

233-
// Clear all Warning/Error message from other providers.
234-
// The message from the graph (when loading the graph) will not be removed
235-
// since it's not the same provider as the UISubTarget. It then stays present
236-
// even if the UV0 is selected.
237-
node.owner.messageManager.ClearNodeFromOtherProvider(this, new[] { node });
232+
if (!IsIUISubTarget(node))
233+
{
234+
msg = null;
235+
return INodeValidationExtension.Status.None;
236+
}
237+
238+
if (!HasUVMaterialSlotOrIsUVNode(node))
239+
{
240+
msg = null;
241+
return INodeValidationExtension.Status.None;
242+
}
243+
244+
node.owner.messageManager.ClearNodesFromProvider(node.owner, new[] { node });
245+
node.owner.messageManager.ClearNodesFromProvider(this, new[] { node });
238246

239247
foreach (var item in node.owner.activeTargets)
240248
{
@@ -251,8 +259,53 @@ public INodeValidationExtension.Status GetValidationStatus(AbstractMaterialNode
251259
return INodeValidationExtension.Status.None;
252260
}
253261

254-
private bool ValidateUV(AbstractMaterialNode node, out string warningMessage)
262+
static bool IsIUISubTarget(AbstractMaterialNode node)
255263
{
264+
bool isIUISubTarget = false;
265+
foreach (var target in node.owner.activeTargets)
266+
{
267+
var subTarget = target.activeSubTarget;
268+
if (subTarget is IUISubTarget)
269+
{
270+
isIUISubTarget = true;
271+
break;
272+
}
273+
}
274+
return isIUISubTarget;
275+
}
276+
277+
static bool HasUVMaterialSlotOrIsUVNode(AbstractMaterialNode node)
278+
{
279+
List<UVMaterialSlot> uvSlots = new();
280+
node.GetInputSlots<UVMaterialSlot>(uvSlots);
281+
282+
if (uvSlots.Count > 0)
283+
{
284+
return true;
285+
}
286+
287+
UVNode uvNode = node as UVNode;
288+
if (uvNode != null)
289+
{
290+
return true;
291+
}
292+
return false;
293+
}
294+
295+
static bool ValidateUV(AbstractMaterialNode node, out string warningMessage)
296+
{
297+
if (!IsIUISubTarget(node))
298+
{
299+
warningMessage = null;
300+
return false;
301+
}
302+
303+
if (!HasUVMaterialSlotOrIsUVNode(node))
304+
{
305+
warningMessage = null;
306+
return false;
307+
}
308+
256309
List<UVMaterialSlot> uvSlots = new();
257310
node.GetInputSlots<UVMaterialSlot>(uvSlots);
258311

Packages/com.unity.shadergraph/Editor/Util/MessageManager.cs

Lines changed: 0 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -123,25 +123,6 @@ public void ClearNodesFromProvider(object messageProvider, IEnumerable<AbstractM
123123
}
124124
}
125125
}
126-
127-
public void ClearNodeFromOtherProvider(object messageProvider, IEnumerable<AbstractMaterialNode> nodes)
128-
{
129-
foreach (var key in m_Messages.Keys)
130-
{
131-
if (key != messageProvider)
132-
{
133-
foreach (var node in nodes)
134-
{
135-
if (m_Messages[key].TryGetValue(node.objectId, out var messages))
136-
{
137-
nodeMessagesChanged |= messages.Count > 0;
138-
messages.Clear();
139-
}
140-
}
141-
}
142-
}
143-
}
144-
145126
public void ClearAll()
146127
{
147128
m_Messages.Clear();

Packages/com.unity.shadergraph/Tests/Editor/UnitTests/MessageManagerTests.cs

Lines changed: 0 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -320,27 +320,6 @@ public void ReportAnyErrors_EmptyManager_ErrorOneProvider()
320320
var ret = m_EmptyMgr.HasSeverity();
321321
Assert.IsTrue(ret);
322322
}
323-
324-
[Test]
325-
public void ClearNodesFromOtherProvider()
326-
{
327-
m_ComplexMgr.ClearNodeFromOtherProvider(p0, new List<AbstractMaterialNode> { node1 });
328-
329-
// Verify node1 is still in provider0
330-
Assert.IsTrue(m_ComplexMgr.Messages.ContainsKey(p0));
331-
Assert.IsTrue(m_ComplexMgr.Messages[p0].ContainsKey(node1.objectId));
332-
Assert.AreEqual(1, m_ComplexMgr.Messages[p0][node1.objectId].Count);
333-
Assert.AreEqual(e2, m_ComplexMgr.Messages[p0][node1.objectId][0]);
334-
335-
// Verify node1 is cleared from provider1
336-
Assert.IsTrue(m_ComplexMgr.Messages.ContainsKey(p1));
337-
Assert.IsTrue(m_ComplexMgr.Messages[p1].ContainsKey(node1.objectId));
338-
Assert.AreEqual(0, m_ComplexMgr.Messages[p1][node1.objectId].Count);
339-
340-
// Verify other nodes in provider1 are unchanged
341-
Assert.AreEqual(1, m_ComplexMgr.Messages[p1][node0.objectId].Count);
342-
Assert.AreEqual(1, m_ComplexMgr.Messages[p1][node2.objectId].Count);
343-
}
344323
}
345324
}
346325

0 commit comments

Comments
 (0)