A game about forced loneliness, made by TACStudios
1using System; 2using System.Collections.Generic; 3using UnityObject = UnityEngine.Object; 4 5namespace Unity.VisualScripting 6{ 7 [SpecialUnit] 8 public abstract class MemberUnit : Unit, IAotStubbable 9 { 10 protected MemberUnit() : base() { } 11 12 protected MemberUnit(Member member) : this() 13 { 14 this.member = member; 15 } 16 17 [Serialize] 18 [MemberFilter(Fields = true, Properties = true, Methods = true, Constructors = true)] 19 public Member member { get; set; } 20 21 /// <summary> 22 /// The target object. 23 /// </summary> 24 [DoNotSerialize] 25 [PortLabelHidden] 26 [NullMeansSelf] 27 public ValueInput target { get; private set; } 28 29 public override bool canDefine => member != null; 30 31 protected override void Definition() 32 { 33 member.EnsureReflected(); 34 35 if (!IsMemberValid(member)) 36 { 37 throw new NotSupportedException("The member type is not valid for this unit."); 38 } 39 40 if (member.requiresTarget) 41 { 42 target = ValueInput(member.targetType, nameof(target)); 43 44 target.SetDefaultValue(member.targetType.PseudoDefault()); 45 46 if (typeof(UnityObject).IsAssignableFrom(member.targetType)) 47 { 48 target.NullMeansSelf(); 49 } 50 } 51 } 52 53 protected abstract bool IsMemberValid(Member member); 54 55 public override void Prewarm() 56 { 57 if (member != null && member.isReflected) 58 { 59 member.Prewarm(); 60 } 61 } 62 63 public override IEnumerable<object> GetAotStubs(HashSet<object> visited) 64 { 65 if (member != null && member.isReflected) 66 { 67 yield return member.info; 68 } 69 } 70 } 71}