Skip to content

Commit 4d2c039

Browse files
authored
Merge pull request #10 from GieziJo/9-on-parent-override-instead-of-resettin
On parent setter override instead of resetting
2 parents 2b0274b + fa20d3d commit 4d2c039

3 files changed

Lines changed: 51 additions & 15 deletions

File tree

Editor/SOVariant.cs

Lines changed: 31 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -40,9 +40,9 @@ public SOVariant(T targetObject)
4040
LoadData(targetObject);
4141
}
4242

43-
public bool SetParent(T parent)
43+
public bool SetParent(T parent, bool setToParentData = true)
4444
{
45-
if (_target is null)
45+
if (_target == null)
4646
return false;
4747

4848
if (parent)
@@ -71,16 +71,19 @@ public bool SetParent(T parent)
7171
RemoveFromChildrenData(AssetImporter.GetAtPath(AssetDatabase.GetAssetPath(_parent)), targetGUID);
7272

7373
this._parent = parent;
74+
_overridden = new List<string>();
7475

7576
if (parent)
7677
{
7778
AddToChildrenData(AssetImporter.GetAtPath(AssetDatabase.GetAssetPath(parent)), targetGUID);
7879

79-
InitialiseNewParent();
80+
if (setToParentData)
81+
SetAllFieldsToParent();
82+
else
83+
InitialiseNewParentOverrides();
8084
}
8185

82-
_overridden = new List<string>();
83-
SaveData(new List<string>());
86+
SaveData(_overridden);
8487
return true;
8588
}
8689

@@ -232,7 +235,7 @@ private List<string> DeserializeChildrenData(string data)
232235
return children;
233236
}
234237

235-
private void InitialiseNewParent()
238+
private void SetAllFieldsToParent()
236239
{
237240
foreach (FieldInfo fieldInfo in FieldInfoHelper.GetAllFields(_parent.GetType()))
238241
{
@@ -241,6 +244,28 @@ private void InitialiseNewParent()
241244
}
242245
}
243246

247+
public void ResetAllFieldsToParentValue()
248+
{
249+
List<string> oldOverrides = new List<string>(_overridden);
250+
_overridden.Clear();
251+
252+
SetAllFieldsToParent();
253+
254+
SaveData(_overridden, oldOverrides);
255+
}
256+
257+
private void InitialiseNewParentOverrides()
258+
{
259+
foreach (FieldInfo fieldInfo in FieldInfoHelper.GetAllFields(_parent.GetType()))
260+
{
261+
object parentValue = FieldInfoHelper.GetFieldRecursively(_parent.GetType(), fieldInfo.Name).GetValue(_parent);
262+
object targetValue = FieldInfoHelper.GetFieldRecursively(_target.GetType(), fieldInfo.Name).GetValue(_target);
263+
264+
if(parentValue != targetValue)
265+
_overridden.Add(fieldInfo.Name);
266+
}
267+
}
268+
244269
private void PropagateValuesToChildren(T target, string targetGUID, ref List<string> children,
245270
AssetImporter importer, List<string> changedValues)
246271
{

Editor/SOVariantAttributeProcessor.cs

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ public class SOVariantAttributeProcessor<T> : OdinPropertyProcessor<T> where T :
3131

3232
void ParentSetter(T parent)
3333
{
34-
if(!_soVariant.SetParent(parent))
34+
if(!_soVariant.SetParent(parent, false))
3535
return;
3636

3737
_soVariant._overridden = null;
@@ -69,6 +69,7 @@ public override void ProcessMemberProperties(List<InspectorPropertyInfo> propert
6969

7070
if (_soVariant._parent != null)
7171
{
72+
7273
_soVariant._otherSerializationBackend = new List<string>();
7374
foreach (InspectorPropertyInfo propertyInfo in new List<InspectorPropertyInfo>(propertyInfos))
7475
{
@@ -88,13 +89,23 @@ public override void ProcessMemberProperties(List<InspectorPropertyInfo> propert
8889
// ! enable to debug
8990
// propertyInfo.GetEditableAttributesList().Add(new ShowDrawerChainAttribute());
9091
}
92+
93+
propertyInfos.AddDelegate("Reset all values to Original", () =>
94+
{
95+
_soVariant.ResetAllFieldsToParentValue();
96+
_soVariant._overridden = null;
97+
Property.RefreshSetup();
98+
});
99+
100+
var propertyButton = propertyInfos.Last();
101+
propertyInfos.Insert(0, propertyButton);
102+
propertyInfos.RemoveAt(propertyInfos.Count - 1);
103+
propertyButton.GetEditableAttributesList().Add(bxa);
91104
}
92105

93106
propertyInfos.AddValue("Original", () => _soVariant._parent, ParentSetter);
94107

95108
InspectorPropertyInfo parentPropertyInfo = propertyInfos.Last();
96-
97-
98109
propertyInfos.Insert(0, parentPropertyInfo);
99110
propertyInfos.RemoveAt(propertyInfos.Count - 1);
100111

Editor/SOVariantHelper.cs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -17,13 +17,13 @@ namespace Giezi.Tools
1717
{
1818
public static class SOVariantHelper<T> where T : ScriptableObject
1919
{
20-
public static bool SetParent(T child, T parent)
20+
public static bool SetParent(T child, T parent, bool setToParentValue=true)
2121
{
2222
AssertIsSOVariant(parent);
2323
AssertIsSOVariant(child);
2424

2525
SOVariant<T> soVariant = new SOVariant<T>(child);
26-
return soVariant.SetParent(parent);
26+
return soVariant.SetParent(parent, setToParentValue);
2727
}
2828

2929
public static void ChangeFieldOverrideState(T target, string name, bool isOverridden)
@@ -51,25 +51,25 @@ public static void SetFieldOverrideAndSetValue(T target, string name, object val
5151
soVariant.ChangeValue(name, value);
5252
}
5353

54-
public static void SetParentOverrideValue(T child, T parent, string name, object value)
54+
public static void SetParentOverrideValue(T child, T parent, string name, object value, bool setToParentValue=true)
5555
{
5656
AssertIsSOVariant(parent);
5757
AssertIsSOVariant(child);
5858

5959
SOVariant<T> soVariant = new SOVariant<T>(child);
60-
soVariant.SetParent(parent);
60+
soVariant.SetParent(parent, setToParentValue);
6161

6262
soVariant.NotifyOverrideChangeInState(name, true);
6363
soVariant.ChangeValue(name, value);
6464
}
6565

66-
public static void SetParentOverrideValues(T child, T parent, Dictionary<string, object> values)
66+
public static void SetParentOverrideValues(T child, T parent, Dictionary<string, object> values, bool setToParentValue=true)
6767
{
6868
AssertIsSOVariant(parent);
6969
AssertIsSOVariant(child);
7070

7171
SOVariant<T> soVariant = new SOVariant<T>(child);
72-
soVariant.SetParent(parent);
72+
soVariant.SetParent(parent, setToParentValue);
7373

7474
foreach (KeyValuePair<string, object> value in values)
7575
{

0 commit comments

Comments
 (0)