Skip to content

Commit 2484001

Browse files
authored
Merge pull request #251 from umasteeringgroup/fix-281-rc2-powertoolsevents
Fixes UMAData events so that removing listeners from them works prope…
2 parents ea7d738 + 7174ab0 commit 2484001

File tree

2 files changed

+23
-32
lines changed

2 files changed

+23
-32
lines changed

UMAProject/Assets/UMA/Core/StandardAssets/UMA/Scripts/UMAData.cs

+15-32
Original file line numberDiff line numberDiff line change
@@ -126,28 +126,28 @@ public void RegisterAnimatedBoneHierarchy(int hash)
126126
/// <summary>
127127
/// Callback event when character has been updated.
128128
/// </summary>
129-
public event Action<UMAData> OnCharacterUpdated { add { if (CharacterUpdated == null) CharacterUpdated = new UMADataEvent(); CharacterUpdated.AddListener(new UnityAction<UMAData>(value)); } remove { CharacterUpdated.RemoveListener(new UnityAction<UMAData>(value)); } }
129+
public event Action<UMAData> OnCharacterUpdated { add { if (CharacterUpdated == null) CharacterUpdated = new UMADataEvent(); CharacterUpdated.AddAction(value); } remove { CharacterUpdated.RemoveAction(value); } }
130130
/// <summary>
131131
/// Callback event when character has been completely created.
132132
/// </summary>
133-
public event Action<UMAData> OnCharacterCreated { add { if (CharacterCreated == null) CharacterCreated = new UMADataEvent(); CharacterCreated.AddListener(new UnityAction<UMAData>(value)); } remove { CharacterCreated.RemoveListener(new UnityAction<UMAData>(value)); } }
133+
public event Action<UMAData> OnCharacterCreated { add { if (CharacterCreated == null) CharacterCreated = new UMADataEvent(); CharacterCreated.AddAction(value); } remove { CharacterCreated.RemoveAction(value); } }
134134
/// <summary>
135135
/// Callback event when character has been destroyed.
136136
/// </summary>
137-
public event Action<UMAData> OnCharacterDestroyed { add { if (CharacterDestroyed == null) CharacterDestroyed = new UMADataEvent(); CharacterDestroyed.AddListener(new UnityAction<UMAData>(value)); } remove { CharacterDestroyed.RemoveListener(new UnityAction<UMAData>(value)); } }
137+
public event Action<UMAData> OnCharacterDestroyed { add { if (CharacterDestroyed == null) CharacterDestroyed = new UMADataEvent(); CharacterDestroyed.AddAction(value); } remove { CharacterDestroyed.RemoveAction(value); } }
138138

139139
/// <summary>
140140
/// Callback event when character DNA has been updated.
141141
/// </summary>
142-
public event Action<UMAData> OnCharacterDnaUpdated { add { if (CharacterDnaUpdated == null) CharacterDnaUpdated = new UMADataEvent(); CharacterDnaUpdated.AddListener(new UnityAction<UMAData>(value)); } remove { CharacterDnaUpdated.RemoveListener(new UnityAction<UMAData>(value)); } }
142+
public event Action<UMAData> OnCharacterDnaUpdated { add { if (CharacterDnaUpdated == null) CharacterDnaUpdated = new UMADataEvent(); CharacterDnaUpdated.AddAction(value); } remove { CharacterDnaUpdated.RemoveAction(value); } }
143143
/// <summary>
144144
/// Callback event used by UMA to make last minute tweaks
145145
/// </summary>
146-
public event Action<UMAData> OnCharacterBeforeUpdated { add { if (CharacterBeforeUpdated == null) CharacterBeforeUpdated = new UMADataEvent(); CharacterBeforeUpdated.AddListener(new UnityAction<UMAData>(value)); } remove { CharacterBeforeUpdated.RemoveListener(new UnityAction<UMAData>(value)); } }
146+
public event Action<UMAData> OnCharacterBeforeUpdated { add { if (CharacterBeforeUpdated == null) CharacterBeforeUpdated = new UMADataEvent(); CharacterBeforeUpdated.AddAction(value);} remove { CharacterBeforeUpdated.RemoveAction(value); } }
147147
/// <summary>
148148
/// Callback event used by UMA to make last minute tweaks
149149
/// </summary>
150-
public event Action<UMAData> OnCharacterBeforeDnaUpdated { add { if (CharacterBeforeDnaUpdated == null) CharacterBeforeDnaUpdated = new UMADataEvent(); CharacterBeforeDnaUpdated.AddListener(new UnityAction<UMAData>(value)); } remove { CharacterBeforeUpdated.RemoveListener(new UnityAction<UMAData>(value)); } }
150+
public event Action<UMAData> OnCharacterBeforeDnaUpdated { add { if (CharacterBeforeDnaUpdated == null) CharacterBeforeDnaUpdated = new UMADataEvent(); CharacterBeforeDnaUpdated.AddAction(value);} remove { CharacterBeforeDnaUpdated.RemoveAction(value); } }
151151

152152
public UMADataEvent CharacterCreated;
153153
public UMADataEvent CharacterDestroyed;
@@ -878,44 +878,27 @@ public void MergeMatchingOverlays()
878878
public void PreApplyDNA(UMAData umaData, bool fixUpUMADnaToDynamicUMADna = false)
879879
{
880880
EnsureAllDNAPresent();
881-
bool fixup = false;
882-
//DynamicUMADna:: when loading an older recipe that has UMADnaHumanoid/Tutorial into a race that now uses DynamicUmaDna the following wont work
883-
//so check that and fix it if it happens
884-
if (fixUpUMADnaToDynamicUMADna)
885-
{
886-
DynamicDNAConverterBehaviourBase.FixUpUMADnaToDynamicUMADna(this);
887-
}
888-
else
889-
{
890-
//clear any color adjusters from all overlays in the recipe
891-
//Only do this if we havent looped back to fixup dna
892-
umaData.umaRecipe.ClearOverlayColorAdjusters();
893-
}
881+
//clear any color adjusters from all overlays in the recipe
882+
umaData.umaRecipe.ClearOverlayColorAdjusters();
894883
foreach (var dnaEntry in umaDna)
895884
{
896885
//DynamicDNAPlugins FEATURE: Allow more than one converter to use the same dna
897886
List<DNAConvertDelegate> dnaConverters;
898887
this.umaDNAPreApplyConverters.TryGetValue(dnaEntry.Key, out dnaConverters);
899-
888+
//DynamicUMADna:: when loading an older recipe that has UMADnaHumanoid/Tutorial into a race that now uses DynamicUmaDna the following wont work
889+
//so check that and fix it if it happens
890+
if (dnaConverters == null || dnaConverters.Count == 0)
891+
{
892+
DynamicDNAConverterBehaviourBase.FixUpUMADnaToDynamicUMADna(this);
893+
this.umaDNAPreApplyConverters.TryGetValue(dnaEntry.Key, out dnaConverters);
894+
}
900895
if (dnaConverters != null && dnaConverters.Count > 0)
901896
{
902897
for (int i = 0; i < dnaConverters.Count; i++)
903898
{
904899
dnaConverters[i](umaData, umaData.GetSkeleton());
905900
}
906901
}
907-
else
908-
{
909-
//DynamicUMADna:: try again this time calling FixUpUMADnaToDynamicUMADna first
910-
if (fixUpUMADnaToDynamicUMADna == false)
911-
{
912-
fixup = true;
913-
}
914-
}
915-
}
916-
if (fixup)
917-
{
918-
PreApplyDNA(umaData, true);
919902
}
920903
}
921904

UMAProject/Assets/UMA/Core/StandardAssets/UMA/Scripts/UMAEvents.cs

+8
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,14 @@ public UMADataEvent(UMADataEvent source)
2222
AddListener(target, UnityEventBase.GetValidMethodInfo(target, source.GetPersistentMethodName(i), new Type[] { typeof(UMAData) }));
2323
}
2424
}
25+
public void AddAction(Action<UMAData> action)
26+
{
27+
this.AddListener(action.Target, action.Method);
28+
}
29+
public void RemoveAction(Action<UMAData> action)
30+
{
31+
this.RemoveListener(action.Target, action.Method);
32+
}
2533
}
2634

2735
/// <summary>

0 commit comments

Comments
 (0)