Нема описа
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

TargetUtils.cs 2.4KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. using System;
  2. using System.Linq;
  3. using System.Collections.Generic;
  4. using UnityEditor.Graphing;
  5. using UnityEditor.ShaderGraph.Serialization;
  6. using UnityEngine.Pool;
  7. namespace UnityEditor.ShaderGraph
  8. {
  9. static class TargetUtils
  10. {
  11. public static void ProcessSubTargetList(ref JsonData<SubTarget> activeSubTarget, ref List<SubTarget> subTargets)
  12. {
  13. if (subTargets == null || subTargets.Count == 0)
  14. return;
  15. // assign the initial sub-target, if none is assigned yet
  16. if (activeSubTarget.value == null)
  17. {
  18. // this is a bit of a hack: prefer subtargets named "Lit" if they exist, otherwise default to the first one
  19. // in the future, we should make the default sub-target user configurable
  20. var litSubTarget = subTargets.FirstOrDefault(x => x.displayName == "Lit");
  21. if (litSubTarget != null)
  22. activeSubTarget = litSubTarget;
  23. else
  24. activeSubTarget = subTargets[0];
  25. return;
  26. }
  27. // Update SubTarget list with active SubTarget
  28. var activeSubTargetType = activeSubTarget.value.GetType();
  29. var activeSubTargetCurrent = subTargets.FirstOrDefault(x => x.GetType() == activeSubTargetType);
  30. var index = subTargets.IndexOf(activeSubTargetCurrent);
  31. if (index == -1)
  32. {
  33. ShaderGraphImporter.subtargetNotFoundError = true;
  34. index = 0;
  35. }
  36. else ShaderGraphImporter.subtargetNotFoundError = false;
  37. subTargets[index] = activeSubTarget;
  38. }
  39. public static List<SubTarget> GetSubTargets<T>(T target) where T : Target
  40. {
  41. // Get Variants
  42. var subTargets = ListPool<SubTarget>.Get();
  43. var typeCollection = TypeCache.GetTypesDerivedFrom<SubTarget>();
  44. foreach (var type in typeCollection)
  45. {
  46. if (type.IsAbstract || !type.IsClass)
  47. continue;
  48. var subTarget = (SubTarget)Activator.CreateInstance(type);
  49. if (!subTarget.isHidden && subTarget.targetType.Equals(typeof(T)))
  50. {
  51. subTarget.target = target;
  52. subTargets.Add(subTarget);
  53. }
  54. }
  55. return subTargets;
  56. }
  57. }
  58. }