Skip to content

Commit

Permalink
Fix for rogue CmpAccessory with dynamic bones.
Browse files Browse the repository at this point in the history
  • Loading branch information
OrangeSpork committed Oct 22, 2021
1 parent 063981d commit fce3888
Show file tree
Hide file tree
Showing 4 changed files with 40 additions and 8 deletions.
Expand Up @@ -218,7 +218,7 @@ private bool CheckAndLinkDynamicBone(GameObject go, List<Transform> parentTransf
dynamicBonesInstantiated = true;
AdditionalAccessoryControlDynamicBoneUpdateManager.RegisterDynamicBone(bone, OnDynamicBoneUpdate);
#if DEBUG
Log.LogInfo($"Dynamic Bone Link Established: {bone.gameObject.name}");
Log.LogInfo($"Dynamic Bone Link Established: {bone.gameObject.name} {bone.gameObject.GetInstanceID()}");
#endif
return true;
}
Expand All @@ -240,7 +240,7 @@ private bool CheckAndLinkDynamicBone(GameObject go, List<Transform> parentTransf
dynamicBonesInstantiated = true;
AdditionalAccessoryControlDynamicBoneUpdateManager.RegisterDynamicBone(bone, OnDynamicBoneV2Update);
#if DEBUG
Log.LogInfo($"Dynamic Bone Link Established: {bone.gameObject.name}");
Log.LogInfo($"Dynamic Bone Link Established: {bone.gameObject.name} {bone.gameObject.GetInstanceID()}");
#endif
return true;
}
Expand Down Expand Up @@ -334,9 +334,11 @@ public void OnSkinnedMeshUpdate(SkinnedMeshRenderedVertex vertex)
gameObject.transform.localEulerAngles = Vector3.zero;

gameObject.transform.position = vertex.position;
// gameObject.transform.eulerAngles = gameObject.transform.TransformDirection(gameObject.transform.parent.InverseTransformDirection(gameObject.transform.parent.eulerAngles));
// gameObject.transform.eulerAngles = gameObject.transform.TransformDirection(gameObject.transform.parent.InverseTransformDirection(gameObject.transform.parent.eulerAngles));

}

private bool eofCoroutineRunning = false;
private void LateUpdate()
{
if (LinkParent != null && parentTransform == null)
Expand All @@ -357,10 +359,35 @@ private void LateUpdate()

gameObject.transform.position = parentTransform.position;
gameObject.transform.eulerAngles = parentTransform.eulerAngles;

#if DEBUG
if (Time.frameCount % 60 == 0)
{
Log.LogInfo($"Updating {gameObject.name} {gameObject.GetInstanceID()} My Pos: {gameObject.transform.position} Par Pos: {parentTransform.position}");
if (!eofCoroutineRunning)
{
StartCoroutine(EndOfFrame());
eofCoroutineRunning = true;
}
}

#endif
}
}
}

private IEnumerator EndOfFrame()
{
yield return new WaitForEndOfFrame();

#if DEBUG
if (Time.frameCount % 60 == 0)
Log.LogInfo($"EOF {gameObject.name} {gameObject.GetInstanceID()} My Pos: {gameObject.transform.position} Par Pos: {parentTransform.position}");

eofCoroutineRunning = false;
#endif
}

private void OnDestroy()
{
if (DynamicBone != null && DynamicBone.GetType() == typeof(DynamicBone))
Expand Down
Expand Up @@ -246,7 +246,7 @@ private void DoUpdate()
{
try
{
if (!gameObject.activeInHierarchy)
if (gameObject == null || !gameObject.activeInHierarchy)
{
return;
}
Expand Down
Expand Up @@ -28,7 +28,7 @@ public partial class AdditionalAccessoryControlsPlugin : BaseUnityPlugin

public const string GUID = "orange.spork.additionalaccessorycontrolsplugin";
public const string PluginName = "Additional Accessory Controls";
public const string Version = "1.1.8";
public const string Version = "1.1.9";

public static AdditionalAccessoryControlsPlugin Instance { get; set; } // Me

Expand Down
11 changes: 8 additions & 3 deletions AdditionalAccessoryControls/AdditionalAccessoryHooks.cs
Expand Up @@ -40,10 +40,15 @@ static void MoreAccessoriesLateUpdateForcePostfixPostfix(CmpBase __instance, ref
if (__instance.GetType() != typeof(CmpAccessory))
return;

int slot = int.Parse(__instance.gameObject.name.Substring(7));
if (slot >= 20 && __instance.isVisible)
if (__instance.gameObject.name.Length < 7 || !__instance.gameObject.name.StartsWith("ca_slot"))
return;

if (int.TryParse(__instance.gameObject.name.Substring(7), out int slot))
{
enable = !enable;
if (slot >= 20 && __instance.isVisible)
{
enable = !enable;
}
}
}

Expand Down

0 comments on commit fce3888

Please sign in to comment.