A game about forced loneliness, made by TACStudios
1using System; 2 3namespace Unity.VisualScripting 4{ 5 public interface IUnifiedVariableUnitOption : IUnitOption 6 { 7 VariableKind kind { get; } 8 string name { get; } 9 } 10 11 public abstract class UnifiedVariableUnitOption<TVariableUnit> : UnitOption<TVariableUnit>, IUnifiedVariableUnitOption where TVariableUnit : UnifiedVariableUnit 12 { 13 [Obsolete(Serialization.ConstructorWarning)] 14 protected UnifiedVariableUnitOption() : base() { } 15 16 protected UnifiedVariableUnitOption(VariableKind kind, string defaultName = null) : base() 17 { 18 this.kind = kind; 19 this.name = defaultName; 20 this.unit = (TVariableUnit)Activator.CreateInstance(typeof(TVariableUnit)); 21 FillFromUnit(); 22 } 23 24 public override void Deserialize(UnitOptionRow row) 25 { 26 base.Deserialize(row); 27 28 kind = (VariableKind)Enum.Parse(typeof(VariableKind), row.tag1); 29 name = row.tag2; 30 } 31 32 public override UnitOptionRow Serialize() 33 { 34 var row = base.Serialize(); 35 36 row.tag1 = kind.ToString(); 37 row.tag2 = name; 38 39 return row; 40 } 41 42 public string name { get; private set; } 43 44 public VariableKind kind { get; private set; } 45 46 public bool hasName => !string.IsNullOrEmpty(name); 47 48 protected override string FavoriteKey() 49 { 50 return $"{unit.GetType().FullName}${name}"; 51 } 52 53 private string DimmedKind() 54 { 55 return LudiqGUIUtility.DimString($" ({kind})"); 56 } 57 58 protected abstract string NamedLabel(bool human); 59 60 protected abstract string UnnamedLabel(bool human); 61 62 protected override string Label(bool human) 63 { 64 if (hasName) 65 { 66 return NamedLabel(human); 67 } 68 else 69 { 70 return UnnamedLabel(human); 71 } 72 } 73 74 public override string SearchResultLabel(string query) 75 { 76 if (hasName) 77 { 78 return base.SearchResultLabel(query) + DimmedKind(); 79 } 80 else 81 { 82 return base.SearchResultLabel(query); 83 } 84 } 85 86 protected override EditorTexture Icon() 87 { 88 return BoltCore.Icons.VariableKind(kind); 89 } 90 91 public override void PreconfigureUnit(TVariableUnit unit) 92 { 93 unit.kind = kind; 94 95 if (hasName) 96 { 97 unit.name.SetDefaultValue(name); 98 } 99 100 unit.Define(); // Force redefine, because we changed the kind 101 } 102 } 103}