A stable modding interface between Techblox and mods https://mod.exmods.org/
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

100 lines
4.5KB

  1. using System;
  2. using System.Reflection;
  3. using Harmony;
  4. using GamecraftModdingAPI.Commands;
  5. using GamecraftModdingAPI.Events;
  6. using GamecraftModdingAPI.Utility;
  7. namespace GamecraftModdingAPI.Tests
  8. {
  9. // unused by design
  10. /// <summary>
  11. /// Modding API implemented as a standalone IPA Plugin.
  12. /// Ideally, GamecraftModdingAPI should be loaded by another mod; not itself
  13. /// </summary>
  14. public class GamecraftModdingAPIPluginTest
  15. #if DEBUG
  16. : IllusionPlugin.IEnhancedPlugin
  17. #endif
  18. {
  19. private static HarmonyInstance harmony { get; set; }
  20. public string[] Filter { get; } = new string[] { "Gamecraft" };
  21. public string Name { get; } = Assembly.GetExecutingAssembly().GetName().Name;
  22. public string Version { get; } = Assembly.GetExecutingAssembly().GetName().Version.ToString();
  23. public string HarmonyID { get; } = "org.git.exmods.modtainers.gamecraftmoddingapi";
  24. public void OnApplicationQuit()
  25. {
  26. GamecraftModdingAPI.Main.Shutdown();
  27. }
  28. public void OnApplicationStart()
  29. {
  30. GamecraftModdingAPI.Main.Init();
  31. // in case Steam is not installed/running
  32. // this will crash the game slightly later during startup
  33. //SteamInitPatch.ForcePassSteamCheck = true;
  34. // in case running in a VM
  35. //MinimumSpecsCheckPatch.ForcePassMinimumSpecCheck = true;
  36. // disable background music
  37. AudioTools.SetVolume(0.0f, "Music");
  38. /*if (!FMODUnity.RuntimeManager.HasBankLoaded("Modded"))
  39. {
  40. FMODUnity.RuntimeManager.LoadBank("Modded", true);
  41. }
  42. FMODUnity.RuntimeManager.PlayOneShot("event:/ModEvents/KillDashNine3D");*/
  43. // debug/test handlers
  44. EventManager.AddEventHandler(new SimpleEventHandlerEngine(() => { Logging.Log("App Inited event!"); }, () => { },
  45. EventType.ApplicationInitialized, "appinit API debug"));
  46. EventManager.AddEventHandler(new SimpleEventHandlerEngine(() => { Logging.Log("Menu Activated event!"); },
  47. () => { Logging.Log("Menu Destroyed event!"); },
  48. EventType.Menu, "menuact API debug"));
  49. EventManager.AddEventHandler(new SimpleEventHandlerEngine(() => { Logging.Log("Menu Switched To event!"); }, () => { },
  50. EventType.MenuSwitchedTo, "menuswitch API debug"));
  51. EventManager.AddEventHandler(new SimpleEventHandlerEngine(() => { Logging.Log("Game Activated event!"); },
  52. () => { Logging.Log("Game Destroyed event!"); },
  53. EventType.Game, "gameact API debug"));
  54. EventManager.AddEventHandler(new SimpleEventHandlerEngine(() => { Logging.Log("Game Reloaded event!"); }, () => { },
  55. EventType.GameReloaded, "gamerel API debug"));
  56. EventManager.AddEventHandler(new SimpleEventHandlerEngine(() => { Logging.Log("Game Switched To event!"); }, () => { },
  57. EventType.GameSwitchedTo, "gameswitch API debug"));
  58. // debug/test commands
  59. CommandManager.AddCommand(new SimpleCustomCommandEngine(() => { UnityEngine.Application.Quit(); },
  60. "Exit", "Close Gamecraft without any prompts"));
  61. CommandManager.AddCommand(new SimpleCustomCommandEngine<float>((float d) => { UnityEngine.Camera.main.fieldOfView = d; },
  62. "SetFOV", "Set the player camera's field of view"));
  63. CommandManager.AddCommand(new SimpleCustomCommandEngine<float, float, float>(
  64. (x,y,z) => {
  65. bool success = GamecraftModdingAPI.Blocks.Movement.MoveConnectedBlocks(
  66. GamecraftModdingAPI.Blocks.BlockIdentifiers.LatestBlockID,
  67. new Unity.Mathematics.float3(x, y, z));
  68. if (!success)
  69. {
  70. GamecraftModdingAPI.Utility.Logging.CommandLogError("Blocks can only be moved in Build mode!");
  71. }
  72. }, "MoveLastBlock", "Move the most-recently-placed block, and any connected blocks by the given offset"));
  73. /*CommandManager.AddCommand(new SimpleCustomCommandEngine(() => { FMODUnity.RuntimeManager.PlayOneShot("event:/ModEvents/KillDashNine2D"); },
  74. "Monzy", "Rap"));*/
  75. }
  76. public void OnFixedUpdate() { }
  77. public void OnLateUpdate() { }
  78. public void OnLevelWasInitialized(int level) { }
  79. public void OnLevelWasLoaded(int level) { }
  80. public void OnUpdate() { }
  81. }
  82. }