Skip to content

Commit

Permalink
Alternate Update Mode
Browse files Browse the repository at this point in the history
  • Loading branch information
OrangeSpork committed Nov 8, 2020
1 parent 848623a commit b24f891
Showing 1 changed file with 47 additions and 1 deletion.
48 changes: 47 additions & 1 deletion DynamicBonesGravityPlugin/DynamicBonesGravityPlugin.cs
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ public class DynamicBonesGravityPlugin : BaseUnityPlugin
public static ConfigEntry<bool> RealismEnabled { get; set; }
public static ConfigEntry<bool> AdvancedModeEnabled { get; set; }
public static ConfigEntry<float> AdvancedGravityAdjustment { get; set; }
public static ConfigEntry<bool> AlternateUpdateMode { get; set; }

public static DynamicBonesGravityPlugin Instance { get; set; }

Expand All @@ -42,12 +43,17 @@ public DynamicBonesGravityPlugin()
RealismEnabled = Config.Bind("Config", "Realistic!!!", false, new ConfigDescription("Realish (Compensates for 10x size with 10 Times Default)", null, new ConfigurationManagerAttributes { Order = 3 }));
AdvancedModeEnabled = Config.Bind("Config", "Advanced Mode", false, new ConfigDescription("Use the values below instead of defaults, control your own destiny!", null, new ConfigurationManagerAttributes { Order = 2 }));
AdvancedGravityAdjustment = Config.Bind("Config", "Advanced Gravity", -0.015f, new ConfigDescription("Y Gravity Adjustment", new AcceptableValueRange<float>(-.1f, -0.001f), new ConfigurationManagerAttributes { Order = 1 }));
AlternateUpdateMode = Config.Bind("Config", "Alternate Update Mode", false, new ConfigDescription("Calc in FixedUpdate Instead of LateUpdate", null, new ConfigurationManagerAttributes { Order = -1 }));

Config.SettingChanged += ConfigUpdated;

Harmony harmony = new Harmony(GUID);
MethodInfo overrideMethod = AccessTools.Method(typeof(DynamicBone), "Start", null, null);
harmony.Patch(overrideMethod, new HarmonyMethod(typeof(DynamicBonesGravityPlugin), "OverrideDynamicBonesGravity"), null, null, null);
harmony.Patch(overrideMethod, new HarmonyMethod(typeof(DynamicBonesGravityPlugin), "OverrideDynamicBonesGravity"), null, null, null);
MethodInfo dynamicBoneFixedUpdateMethod = AccessTools.Method(typeof(DynamicBone), "FixedUpdate");
harmony.Patch(dynamicBoneFixedUpdateMethod, new HarmonyMethod(typeof(DynamicBonesGravityPlugin), "DynamicBoneFixedUpdateOverride"), null, null, null);
MethodInfo dyanmicBoneLateUpdateMethod = AccessTools.Method(typeof(DynamicBone), "LateUpdate");
harmony.Patch(dyanmicBoneLateUpdateMethod, new HarmonyMethod(typeof(DynamicBonesGravityPlugin), "DynamicBoneLateUpdateOverride"), null, null, null);
}


Expand Down Expand Up @@ -117,5 +123,45 @@ public void UpdateBones(bool configChange)
UpdateBone(dynamicBone, configChange);
}
}


private static FieldInfo m_distantDisableField = AccessTools.Field(typeof(DynamicBone), "m_DistantDisable");
private static FieldInfo m_distantDisabledField = AccessTools.Field(typeof(DynamicBone), "m_DistantDisabled");
private static FieldInfo m_weightField = AccessTools.Field(typeof(DynamicBone), "m_Weight");
private static MethodInfo preUpdateMethod = AccessTools.Method(typeof(DynamicBone), "PreUpdate");
private static MethodInfo checkDistanceMethod = AccessTools.Method(typeof(DynamicBone), "CheckDistance");
private static MethodInfo updateDynamicBonesMethod = AccessTools.Method(typeof(DynamicBone), "UpdateDynamicBones");

public static bool DynamicBoneFixedUpdateOverride(DynamicBone __instance)
{
if (!AlternateUpdateMode.Value)
{
return true;
}

float m_Weight = (float)m_weightField.GetValue(__instance);
bool m_DistantDisable = (bool)m_distantDisableField.GetValue(__instance);
bool m_DistantDisabled = (bool)m_distantDisabledField.GetValue(__instance);

preUpdateMethod.Invoke(__instance, null);
if (m_DistantDisable)
{
checkDistanceMethod.Invoke(__instance, null);
}
if (m_Weight > 0f && (!m_DistantDisable || !m_DistantDisabled))
{
updateDynamicBonesMethod.Invoke(__instance, new object[] { Time.fixedDeltaTime });
}
return false;
}

public static bool DynamicBoneLateUpdateOverride(DynamicBone __instance)
{
if (!AlternateUpdateMode.Value)
{
return true;
}
return false;
}
}
}

0 comments on commit b24f891

Please sign in to comment.