private static void EngineOnUpdate(On.Monocle.Engine.orig_Update orig, Engine self, GameTime gameTime)
        {
            orig(self, gameTime);
            if (lastRunning != Manager.Running && Manager.Controller.HasFastForward)
            {
                if (Manager.Running)
                {
                    Start();
                }
                else
                {
                    Stop();
                }
            }

            if (Manager.Running)
            {
                if (watch.IsRunning && Manager.IsLoading())
                {
                    watch.Stop();
                }
                else if (!watch.IsRunning && !Manager.IsLoading())
                {
                    watch.Start();
                }
            }

            lastRunning = Manager.Running;
        }
Example #2
0
 private static void EngineOnUpdate(On.Monocle.Engine.orig_Update orig, Engine self, GameTime gameTime)
 {
     Frozen = Engine.FreezeTimer > 0;
     orig(self, gameTime);
     if (Frozen)
     {
         Update();
     }
 }
Example #3
0
        private void UpdateList(On.Monocle.Engine.orig_Update orig, Engine self, GameTime gameTime)
        {
            orig(self, gameTime);

            HistoryEvent e = new HistoryEvent();

            if (Events.Count == 0 || !Events.Last().Equals(e))
            {
                EnqueueEvent(e);
            }
            else
            {
                Events.Last().Time += e.Time;
                Events.Last().Frames++;
            }
        }
Example #4
0
        private static void EngineOnUpdate(On.Monocle.Engine.orig_Update orig, Monocle.Engine self, GameTime gameTime)
        {
            orig(self, gameTime);
            if (lastRunning != Manager.Running)
            {
                if (Manager.Running)
                {
                    Start();
                }
                else
                {
                    Stop();
                }
            }

            lastRunning = Manager.Running;
        }
        public static void Engine_Update(On.Monocle.Engine.orig_Update orig, Engine self, GameTime gameTime)
        {
            SkipBaseUpdate = false;
            InUpdate       = false;

            if (!Settings.Enabled)
            {
                orig(self, gameTime);
                return;
            }

            // The original patch doesn't store FrameLoops in a local variable, but it's only updated in UpdateInputs anyway.
            int  loops          = Manager.FrameLoops;
            bool skipBaseUpdate = !Settings.FastForwardCallBase && loops >= Settings.FastForwardThreshold;

            SkipBaseUpdate = skipBaseUpdate;
            InUpdate       = true;

            for (int i = 0; i < loops; i++)
            {
                // Anything happening early on runs in the MInput.Update hook.
                orig(self, gameTime);

                // Badeline does some dirty stuff in Render.
                if (i < loops - 1)
                {
                    Engine.Scene?.Tracker.GetEntity <FinalBoss>()?.Render();
                }

                // Autosaving prevents opening the menu to skip cutscenes during fast forward.
                if (Engine.Scene is Level level && UserIO.Saving && !SaveData.Instance.Areas[level.Session.Area.ID].Modes[0].Completed)
                {
                    if (Engine.Scene.Entities.FindFirst <EventTrigger>() != null ||
                        Engine.Scene.Entities.FindFirst <NPC>() != null ||
                        Engine.Scene.Entities.FindFirst <FlingBirdIntro>() != null)
                    {
                        skipBaseUpdate = false;
                        loops          = 1;
                    }
                }
            }

            SkipBaseUpdate = false;
            InUpdate       = false;

            if (CelesteTasModule.UnixRtcEnabled && Manager.CurrentStatus != null)
            {
                StreamWriter writer = CelesteTasModule.Instance.UnixRtcStreamOut;
                try {
                    writer.Write(Manager.PlayerStatus.Replace('\n', '~'));
                    writer.Write('%');
                    writer.Write(Manager.CurrentStatus.Replace('\n', '~'));
                    writer.Write('%');
                    if (Engine.Scene is Level level)
                    {
                        writer.Write(level.Session.LevelData.Name);
                    }

                    writer.WriteLine();
                    writer.FlushAsync();
                } catch { }
            }

            if (skipBaseUpdate)
            {
                OrigGameUpdate(self, gameTime);
            }
        }