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}