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; }
private static void EngineOnUpdate(On.Monocle.Engine.orig_Update orig, Engine self, GameTime gameTime) { Frozen = Engine.FreezeTimer > 0; orig(self, gameTime); if (Frozen) { Update(); } }
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++; } }
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); } }