Low spec Gamecraft mod
Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.
Это архивный репозиторий. Вы можете его клонировать или просматривать файлы, но не вносить изменения или открывать задачи/запросы на слияние.

133 строки
5.8KB

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