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 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 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(); }