public static bool SubSustainerUpdate(SubSustainer __instance) { lock (__instance) { SampleSustainer sample; for (int num = samples(__instance).Count - 1; num >= 0; num--) { sample = samples(__instance)[num]; if (sample != null) { if (Time.realtimeSinceStartup > samples(__instance)[num].scheduledEndTime) { EndSample2(__instance, sample); } } } if (Time.realtimeSinceStartup > nextSampleStartTime(__instance)) { StartSample(__instance); } for (int i = 0; i < samples(__instance).Count; i++) { sample = samples(__instance)[i]; if (sample != null) { sample.Update(); } } } return(false); }
private static void EndSample2(SubSustainer __instance, SampleSustainer samp) { List <SampleSustainer> newSamples = new List <SampleSustainer>(samples(__instance)); newSamples.Remove(samp); samples(__instance) = newSamples; samp.SampleCleanup(); }
public static bool StartSample(SubSustainer __instance) { ResolvedGrain resolvedGrain = __instance.subDef.RandomizedResolvedGrain(); if (resolvedGrain == null) { Log.Error(string.Concat(new object[] { "SubSustainer for ", __instance.subDef, " of ", __instance.parent.def, " could not resolve any grains." }), false); __instance.parent.End(); return(false); } float num; if (__instance.subDef.sustainLoop) { num = __instance.subDef.sustainLoopDurationRange.RandomInRange; } else { num = resolvedGrain.duration; } float num2 = Time.realtimeSinceStartup + num; nextSampleStartTime(__instance) = num2 + __instance.subDef.sustainIntervalRange.RandomInRange; if (nextSampleStartTime(__instance) < Time.realtimeSinceStartup + 0.01f) { nextSampleStartTime(__instance) = Time.realtimeSinceStartup + 0.01f; } if (resolvedGrain is ResolvedGrain_Silence) { return(false); } SampleSustainer sampleSustainer = SampleSustainer.TryMakeAndPlay(__instance, ((ResolvedGrain_Clip)resolvedGrain).clip, num2); if (sampleSustainer != null) { if (__instance.subDef.sustainSkipFirstAttack && Time.frameCount == __instance.creationFrame) { sampleSustainer.resolvedSkipAttack = true; } lock (__instance) { samples(__instance).Add(sampleSustainer); } } return(false); }
public static bool TryMakeAndPlay(ref SampleSustainer __result, SubSustainer subSus, AudioClip clip, float scheduledEndTime) { if (allThreads2.TryGetValue(CurrentThread, out ThreadInfo threadInfo)) { threadInfo.safeFunctionRequest = new object[] { safeFunction, new object[] { subSus, clip, scheduledEndTime } }; mainThreadWaitHandle.Set(); threadInfo.eventWaitStart.WaitOne(); __result = (SampleSustainer)threadInfo.safeFunctionResult; return(false); } return(true); }
public static bool StartSample(SubSustainer __instance) { ResolvedGrain resolvedGrain = __instance.subDef.RandomizedResolvedGrain(); if (resolvedGrain == null) { Log.Error(string.Concat(new object[] { "SubSustainer for ", __instance.subDef, " of ", __instance.parent.def, " could not resolve any grains." }), false); __instance.parent.End(); return(false); } float num; if (__instance.subDef.sustainLoop) { num = __instance.subDef.sustainLoopDurationRange.RandomInRange; } else { num = resolvedGrain.duration; } float num2 = Time.realtimeSinceStartup + num; nextSampleStartTime(__instance) = num2 + __instance.subDef.sustainIntervalRange.RandomInRange; if (nextSampleStartTime(__instance) < Time.realtimeSinceStartup + 0.01f) { nextSampleStartTime(__instance) = Time.realtimeSinceStartup + 0.01f; } if (resolvedGrain is ResolvedGrain_Silence) { return(false); } int tID = Thread.CurrentThread.ManagedThreadId; if (Ticklist_Patch.eventWaitStarts.TryGetValue(tID, out EventWaitHandle eventWaitStart)) { Ticklist_Patch.tryMakeAndPlayRequests.TryAdd(tID, new object[] { __instance, ((ResolvedGrain_Clip)resolvedGrain).clip, num2 }); Ticklist_Patch.mainThreadWaitHandle.Set(); eventWaitStart.WaitOne(); } return(false); }
public static bool TryMakeAndPlay(ref SampleSustainer __result, SubSustainer subSus, AudioClip clip, float scheduledEndTime) { int tID = Thread.CurrentThread.ManagedThreadId; if (RimThreaded.mainRequestWaits.TryGetValue(tID, out EventWaitHandle eventWaitStart)) { object[] functionAndParameters = new object[] { safeFunction, new object[] { subSus, clip, scheduledEndTime } }; lock (RimThreaded.safeFunctionRequests) { RimThreaded.safeFunctionRequests[tID] = functionAndParameters; } RimThreaded.mainThreadWaitHandle.Set(); eventWaitStart.WaitOne(); RimThreaded.safeFunctionResults.TryGetValue(tID, out object safeFunctionResult); __result = (SampleSustainer)safeFunctionResult; return(false); } return(true); }
public static bool SubSustainerUpdate(SubSustainer __instance) { for (int index = samples(__instance).Count - 1; index >= 0; --index) { if ((double)Time.realtimeSinceStartup > (double)samples(__instance)[index].scheduledEndTime) { EndSample2(__instance, samples(__instance)[index]); } } if ((double)Time.realtimeSinceStartup > (double)nextSampleStartTime(__instance)) { StartSample(__instance); } for (int index = 0; index < samples(__instance).Count; ++index) { samples(__instance)[index].Update(); } return(false); }
public static bool StartSample(SubSustainer __instance) { ResolvedGrain resolvedGrain = __instance.subDef.RandomizedResolvedGrain(); if (resolvedGrain == null) { Log.Error(string.Concat(new object[] { "SubSustainer for ", __instance.subDef, " of ", __instance.parent.def, " could not resolve any grains." }), false); __instance.parent.End(); return(false); } float num; if (__instance.subDef.sustainLoop) { num = __instance.subDef.sustainLoopDurationRange.RandomInRange; } else { num = resolvedGrain.duration; } float num2 = Time.realtimeSinceStartup + num; nextSampleStartTime(__instance) = num2 + __instance.subDef.sustainIntervalRange.RandomInRange; if (nextSampleStartTime(__instance) < Time.realtimeSinceStartup + 0.01f) { nextSampleStartTime(__instance) = Time.realtimeSinceStartup + 0.01f; } if (resolvedGrain is ResolvedGrain_Silence) { return(false); } SampleSustainer sampleSustainer = SampleSustainer.TryMakeAndPlay(__instance, ((ResolvedGrain_Clip)resolvedGrain).clip, num2); if (sampleSustainer != null) { if (__instance.subDef.sustainSkipFirstAttack && Time.frameCount == __instance.creationFrame) { sampleSustainer.resolvedSkipAttack = true; } samples(__instance).Add(sampleSustainer); } /* * int tID = Thread.CurrentThread.ManagedThreadId; * if (RimThreaded.mainRequestWaits.TryGetValue(tID, out EventWaitHandle eventWaitStart)) * { * RimThreaded.tryMakeAndPlayRequests.TryAdd(tID, new object[] { __instance, ((ResolvedGrain_Clip)resolvedGrain).clip, num2 }); * RimThreaded.mainThreadWaitHandle.Set(); * eventWaitStart.WaitOne(); * } */ return(false); }
private static void EndSample2(SubSustainer __instance, SampleSustainer samp) { samples(__instance).Remove(samp); samp.SampleCleanup(); }