Пример #1
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();
        }
Пример #2
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);
        }
Пример #3
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);
 }
Пример #4
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);
        }
Пример #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);
            }

            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);
        }
Пример #6
0
 private static void EndSample2(SubSustainer __instance, SampleSustainer samp)
 {
     samples(__instance).Remove(samp);
     samp.SampleCleanup();
 }