Low spec Gamecraft mod
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.
This repo is archived. You can view files and clone it, but cannot push or open issues/pull-requests.

134 lines
5.8KB

  1. using System;
  2. using System.Reflection;
  3. //using UnityEngine;
  4. using IllusionPlugin;
  5. //using GamecraftModdingAPI;
  6. using GamecraftModdingAPI.Commands;
  7. namespace Kompressor
  8. {
  9. public class MyPlugin : IPlugin // the Illusion Plugin Architecture (IPA) will ignore classes that don't implement IPlugin'
  10. {
  11. public string Name { get; } = Assembly.GetExecutingAssembly().GetName().Name; // Kompressor by default
  12. // To change the name, change the project's name
  13. public string Version { get; } = Assembly.GetExecutingAssembly().GetName().Version.ToString(); // 0.0.1.0 by default
  14. // To change the version, change <Version>0.0.1</Version> in Kompressor.csproj
  15. private const string SETTINGS_PATH = "kompressor.json";
  16. // called when Gamecraft shuts down
  17. public void OnApplicationQuit()
  18. {
  19. // Shutdown this mod
  20. GamecraftModdingAPI.Utility.Logging.LogDebug($"{Name} has shutdown");
  21. // Shutdown the Gamecraft modding API last
  22. GamecraftModdingAPI.Main.Shutdown();
  23. }
  24. // called when Gamecraft starts up
  25. public void OnApplicationStart()
  26. {
  27. // Initialize the Gamecraft modding API first
  28. GamecraftModdingAPI.Main.Init();
  29. // check out the modding API docs here: https://mod.exmods.org/
  30. // reload command
  31. CommandBuilder.Builder()
  32. .Name("ReloadKompressor")
  33. .Description("Reload Kompressor quality settings.")
  34. .Action(() => { LoadAndApplySettings(); })
  35. .Build();
  36. // apply settings after the game starts up (but only once)
  37. bool IsGamecraftStarted = false;
  38. GamecraftModdingAPI.App.Client.EnterMenu += (_, __) =>
  39. {
  40. if (IsGamecraftStarted) return;
  41. IsGamecraftStarted = true;
  42. try
  43. {
  44. LoadAndApplySettings();
  45. }
  46. catch (Exception)
  47. {
  48. GamecraftModdingAPI.Utility.Logging.LogWarning("Failed to load kompressor.json, generated default file.");
  49. }
  50. };
  51. GamecraftModdingAPI.Utility.Logging.MetaLog($"{Name} has started up");
  52. }
  53. internal void LoadAndApplySettings(bool suppress = false)
  54. {
  55. QualitySettings qs = QualitySettingsUtility.Default();
  56. try
  57. {
  58. qs = QualitySettingsUtility.Load(SETTINGS_PATH);
  59. }
  60. catch (Exception e)
  61. {
  62. QualitySettingsUtility.Save(qs, SETTINGS_PATH);
  63. if (!suppress) throw e;
  64. }
  65. ApplySettings(qs);
  66. }
  67. internal void ApplySettings(QualitySettings qs)
  68. {
  69. UnityEngine.QualitySettings.SetQualityLevel(qs.QualitySettingIndex, true);
  70. // TODO
  71. UnityEngine.QualitySettings.anisotropicFiltering = (UnityEngine.AnisotropicFiltering)System.Enum.Parse(typeof(UnityEngine.AnisotropicFiltering), qs.AnisotropicFiltering);
  72. UnityEngine.QualitySettings.antiAliasing = qs.AntiAliasing;
  73. UnityEngine.QualitySettings.asyncUploadBufferSize = qs.AsyncUploadBufferSize;
  74. UnityEngine.QualitySettings.asyncUploadPersistentBuffer = qs.AsyncUploadPersistentBuffer;
  75. UnityEngine.QualitySettings.asyncUploadTimeSlice = qs.AsyncUploadTimeSlice;
  76. UnityEngine.QualitySettings.billboardsFaceCameraPosition = qs.BillBoardsFaceCameraPosition;
  77. UnityEngine.QualitySettings.lodBias = qs.LODBias;
  78. UnityEngine.QualitySettings.masterTextureLimit = qs.MasterTextureLimit;
  79. UnityEngine.QualitySettings.maximumLODLevel = qs.MaximumLODLevel;
  80. UnityEngine.QualitySettings.maxQueuedFrames = qs.MaxQueuedFrames;
  81. UnityEngine.QualitySettings.particleRaycastBudget = qs.ParticleRaycastBudget;
  82. UnityEngine.QualitySettings.pixelLightCount = qs.PixelLightCount;
  83. UnityEngine.QualitySettings.realtimeReflectionProbes = qs.RealtimeReflectionProbes;
  84. UnityEngine.QualitySettings.resolutionScalingFixedDPIFactor = qs.ResolutionScalingFixedDPIFactor;
  85. UnityEngine.QualitySettings.shadowCascade2Split = qs.ShadowCascade2Split;
  86. // TODO shadowCascade4Split
  87. UnityEngine.QualitySettings.shadowCascades = qs.ShadowCascades;
  88. UnityEngine.QualitySettings.shadowDistance = qs.ShadowDistance;
  89. UnityEngine.QualitySettings.shadowmaskMode = (UnityEngine.ShadowmaskMode)Enum.Parse(typeof(UnityEngine.ShadowmaskMode), qs.ShadowmaskMode);
  90. UnityEngine.QualitySettings.shadowNearPlaneOffset = qs.ShadowNearPlaneOffset;
  91. UnityEngine.QualitySettings.shadowProjection = (UnityEngine.ShadowProjection)Enum.Parse(typeof(UnityEngine.ShadowProjection), qs.ShadowProjection);
  92. UnityEngine.QualitySettings.shadowResolution = (UnityEngine.ShadowResolution)Enum.Parse(typeof(UnityEngine.ShadowResolution), qs.ShadowResolution);
  93. UnityEngine.QualitySettings.shadows = (UnityEngine.ShadowQuality)Enum.Parse(typeof(UnityEngine.ShadowQuality), qs.Shadows);
  94. UnityEngine.QualitySettings.skinWeights = (UnityEngine.SkinWeights)Enum.Parse(typeof(UnityEngine.SkinWeights), qs.SkinWeights);
  95. UnityEngine.QualitySettings.softParticles = qs.SoftParticles;
  96. UnityEngine.QualitySettings.softVegetation = qs.SoftVegetation;
  97. UnityEngine.QualitySettings.streamingMipmapsActive = qs.StreamingMipmapsActive;
  98. UnityEngine.QualitySettings.streamingMipmapsAddAllCameras = qs.StreamingMipmapsAddAllCameras;
  99. UnityEngine.QualitySettings.streamingMipmapsMaxFileIORequests = qs.StreamingMipmapsMaxFileIORequests;
  100. UnityEngine.QualitySettings.streamingMipmapsMaxLevelReduction = qs.StreamingMipmapsMaxLevelReduction;
  101. UnityEngine.QualitySettings.streamingMipmapsMemoryBudget = qs.StreamingMipmapsMemoryBudget;
  102. //UnityEngine.QualitySettings.streamingMipmapsRenderersPerFrame = qs.StreamingMipmapsRendersPerFrame;
  103. UnityEngine.QualitySettings.vSyncCount = qs.VSyncCount;
  104. UnityEngine.Application.targetFrameRate = qs.TargetFrameRate;
  105. UnityEngine.Camera.main.fieldOfView = qs.FieldOfView;
  106. }
  107. // unused methods
  108. public void OnFixedUpdate() { } // called once per physics update
  109. public void OnLevelWasInitialized(int level) { } // called after a level is initialized
  110. public void OnLevelWasLoaded(int level) { } // called after a level is loaded
  111. public void OnUpdate() { } // called once per rendered frame (frame update)
  112. }
  113. }