Example #1
0
        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);
        }
Example #2
0
        private static void EndSample2(SubSustainer __instance, SampleSustainer samp)
        {
            List <SampleSustainer> newSamples = new List <SampleSustainer>(samples(__instance));

            newSamples.Remove(samp);
            samples(__instance) = newSamples;
            samp.SampleCleanup();
        }
Example #3
0
        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);
        }
Example #4
0
 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);
 }
Example #5
0
        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);
        }
Example #6
0
        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);
        }
Example #7
0
 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);
 }
Example #8
0
        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);
        }
Example #9
0
 private static void EndSample2(SubSustainer __instance, SampleSustainer samp)
 {
     samples(__instance).Remove(samp);
     samp.SampleCleanup();
 }