Skip to content

Commit

Permalink
Fixed modified bones gradually drifting when reloading a character; R…
Browse files Browse the repository at this point in the history
…educed allocations
  • Loading branch information
ManlyMarco committed Sep 27, 2020
1 parent 775803c commit 55e32c1
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 12 deletions.
30 changes: 18 additions & 12 deletions Shared/Core/BoneController.cs
Expand Up @@ -326,10 +326,11 @@ private void LateUpdate()

NeedsBaselineUpdate = false;
}


private readonly Dictionary<BoneModifier, List<BoneModifierData>> _effectsToUpdate = new Dictionary<BoneModifier, List<BoneModifierData>>();
private void ApplyEffects()
{
var toUpdate = new Dictionary<BoneModifier, List<BoneModifierData>>();
_effectsToUpdate.Clear();

foreach (var additionalBoneEffect in _additionalBoneEffects)
{
Expand All @@ -346,10 +347,10 @@ private void ApplyEffects()
AddModifier(modifier);
}

if (!toUpdate.TryGetValue(modifier, out var list))
if (!_effectsToUpdate.TryGetValue(modifier, out var list))
{
list = new List<BoneModifierData>();
toUpdate[modifier] = list;
_effectsToUpdate[modifier] = list;
}
list.Add(effect);
}
Expand All @@ -359,7 +360,7 @@ private void ApplyEffects()
for (var i = 0; i < Modifiers.Count; i++)
{
var modifier = Modifiers[i];
if (!toUpdate.TryGetValue(modifier, out var list))
if (!_effectsToUpdate.TryGetValue(modifier, out var list))
{
// Clean up no longer necessary modifiers
if (!GUI.KKABMX_AdvancedGUI.Enabled && modifier.IsEmpty())
Expand All @@ -369,17 +370,18 @@ private void ApplyEffects()
modifier.Apply(CurrentCoordinate.Value, list, _isDuringHScene);
}

// Fix some bust physics issues
if (Modifiers.Count > 0)
ChaControl.UpdateBustGravity();
// Fix some bust physics issues todo does this still work to fix original isse? causes gravity issue by itself without the =false because its running every frame
if (Modifiers.Count > 0 && !ChaControl.reSetupDynamicBoneBust)
if (ChaControl.UpdateBustGravity())
ChaControl.reSetupDynamicBoneBust = false;
}

private IEnumerator OnDataChangedCo()
{
CleanEmptyModifiers();

// Needed to let accessories load in
yield return new WaitForEndOfFrame();
yield return Utilities.WaitForEndOfFrame;

ModifiersFillInTransforms();

Expand All @@ -395,9 +397,12 @@ private void CollectBaseline()

private IEnumerator CollectBaselineCo()
{
do yield return new WaitForEndOfFrame();
do yield return Utilities.WaitForEndOfFrame;
while (ChaControl.animBody == null);

var animSpeed = ChaControl.animBody.speed;
ChaControl.animBody.speed = 0;

#if KK || AI || HS2 // Only for studio
var pvCopy = ChaControl.animBody.gameObject.GetComponent<Studio.PVCopy>();
bool[] currentPvCopy = null;
Expand All @@ -413,7 +418,7 @@ private IEnumerator CollectBaselineCo()
}
#endif

yield return new WaitForEndOfFrame();
yield return Utilities.WaitForEndOfFrame;

// Ensure that the baseline is correct
ChaControl.updateShapeFace = true;
Expand All @@ -427,7 +432,7 @@ private IEnumerator CollectBaselineCo()

_baselineKnown = true;

yield return new WaitForEndOfFrame();
yield return Utilities.WaitForEndOfFrame;

#if KK || AI || HS2 // Only for studio
if (pvCopy != null)
Expand All @@ -445,6 +450,7 @@ private IEnumerator CollectBaselineCo()
}
}
#endif
ChaControl.animBody.speed = animSpeed;
}

/// <summary>
Expand Down
2 changes: 2 additions & 0 deletions Shared/Core/Utilities.cs
Expand Up @@ -54,5 +54,7 @@ public static ShapeInfoBase GetSibBody(this ChaControl chaControl)
{
return (Dictionary<int, ShapeInfoBase.BoneInfo>)FieldShapeInfoBaseDictDst.GetValue(sibBody);
}

internal static readonly WaitForEndOfFrame WaitForEndOfFrame = new WaitForEndOfFrame();
}
}

0 comments on commit 55e32c1

Please sign in to comment.