public static void Init() { try { if (Log != null) { return; } Setup(); ModScanner.BuildModList(); ModPhases.RunPhase("SplashMod"); if (!GamePatcher.PatchPhases()) { Log.Log(SourceLevels.Critical, "Cannot patch game with Harmony. Non-SplashMods may not be loaded."); } } catch (Exception ex) { if (Log == null) { Console.WriteLine(ex); } else { Log.Error(ex); } } }
private static void AfterHideTip() { if (!FireGeoscapeOnShow) { return; } ModPhases.RunPhase("GameOnShow"); ModPhases.RunPhase("GeoscapeOnShow"); FireGeoscapeOnShow = false; }
// Mainly call GeoscapeOnHide and GameOnHide when quiting from Geoscape, which seems to not trigger OnLevelStateChanged. // May also be called if an exception bubbles to the main game loop. private static void BeforeQuit() { Log.Info("Game Quit"); if (ModPhases.LastPhase?.EndsWith("OnShow", StringComparison.Ordinal) != true) { return; } ModPhases.RunPhase(ModPhases.LastPhase.Replace("OnShow", "OnHide")); if (ModPhases.LastPhase != "HomeOnHide") { ModPhases.RunPhase("GameOnHide"); } Log.Flush(); }
private static void StateChanged(string level, int prevState, int newState) { //Log.Trace( "{0} StateChanged {1} => {2}", level, prevState, newState ); switch (prevState) { case -1: // Uninitialized => NotLoaded if (level != "Home") { ModPhases.RunPhase("GameMod"); } ModPhases.RunPhase(level + "Mod"); return; case 5: // Playing => Loaded if (ModPhases.LastPhase?.EndsWith("OnHide", StringComparison.Ordinal) == true) { return; } ModPhases.RunPhase(level + "OnHide"); if (level != "Home") { ModPhases.RunPhase("GameOnHide"); } return; case 2: // Loaded => Playing, OR Loaded => Unloading if (newState != 5) { return; } if (level == "Geoscape") { FireGeoscapeOnShow = true; } else { if (level != "Home") { ModPhases.RunPhase("GameOnShow"); } ModPhases.RunPhase(level + "OnShow"); } return; } }
private static void MainPhase() { ModPhases.RunPhase("Init"); // PPML v0.1 ModPhases.RunPhase("Initialize"); // PPML v0.2 ModPhases.RunPhase("MainMod"); // Modnix 1 & 2 }