|
- using System;
- using System.Reflection;
-
- //using UnityEngine;
-
- using IllusionPlugin;
- //using GamecraftModdingAPI;
- using GamecraftModdingAPI.Commands;
-
- namespace Kompressor
- {
- public class MyPlugin : IPlugin // the Illusion Plugin Architecture (IPA) will ignore classes that don't implement IPlugin'
- {
- public string Name { get; } = Assembly.GetExecutingAssembly().GetName().Name; // Kompressor by default
- // To change the name, change the project's name
-
- public string Version { get; } = Assembly.GetExecutingAssembly().GetName().Version.ToString(); // 0.0.1.0 by default
- // To change the version, change <Version>0.0.1</Version> in Kompressor.csproj
-
- private const string SETTINGS_PATH = "kompressor.json";
-
- // called when Gamecraft shuts down
- public void OnApplicationQuit()
- {
- // Shutdown this mod
- GamecraftModdingAPI.Utility.Logging.LogDebug($"{Name} has shutdown");
-
- // Shutdown the Gamecraft modding API last
- GamecraftModdingAPI.Main.Shutdown();
- }
-
- // called when Gamecraft starts up
- public void OnApplicationStart()
- {
- // Initialize the Gamecraft modding API first
- GamecraftModdingAPI.Main.Init();
- // check out the modding API docs here: https://mod.exmods.org/
-
- // reload command
- CommandBuilder.Builder()
- .Name("ReloadKompressor")
- .Description("Reload Kompressor quality settings.")
- .Action(() => { LoadAndApplySettings(); })
- .Build();
-
- // apply settings after the game starts up (but only once)
- bool IsGamecraftStarted = false;
- GamecraftModdingAPI.App.Client.EnterMenu += (_, __) =>
- {
- if (IsGamecraftStarted) return;
- IsGamecraftStarted = true;
- try
- {
- LoadAndApplySettings();
- }
- catch (Exception)
- {
- GamecraftModdingAPI.Utility.Logging.LogWarning("Failed to load kompressor.json, generated default file.");
- }
-
- };
-
- GamecraftModdingAPI.Utility.Logging.MetaLog($"{Name} has started up");
- }
-
- internal void LoadAndApplySettings(bool suppress = false)
- {
- QualitySettings qs = QualitySettingsUtility.Default();
- try
- {
- qs = QualitySettingsUtility.Load(SETTINGS_PATH);
- }
- catch (Exception e)
- {
- QualitySettingsUtility.Save(qs, SETTINGS_PATH);
- if (!suppress) throw e;
- }
-
- ApplySettings(qs);
- }
-
- internal void ApplySettings(QualitySettings qs)
- {
- UnityEngine.QualitySettings.SetQualityLevel(qs.QualitySettingIndex, true);
- // TODO
- UnityEngine.QualitySettings.anisotropicFiltering = (UnityEngine.AnisotropicFiltering)System.Enum.Parse(typeof(UnityEngine.AnisotropicFiltering), qs.AnisotropicFiltering);
- UnityEngine.QualitySettings.antiAliasing = qs.AntiAliasing;
- UnityEngine.QualitySettings.asyncUploadBufferSize = qs.AsyncUploadBufferSize;
- UnityEngine.QualitySettings.asyncUploadPersistentBuffer = qs.AsyncUploadPersistentBuffer;
- UnityEngine.QualitySettings.asyncUploadTimeSlice = qs.AsyncUploadTimeSlice;
- UnityEngine.QualitySettings.billboardsFaceCameraPosition = qs.BillBoardsFaceCameraPosition;
- UnityEngine.QualitySettings.lodBias = qs.LODBias;
- UnityEngine.QualitySettings.masterTextureLimit = qs.MasterTextureLimit;
- UnityEngine.QualitySettings.maximumLODLevel = qs.MaximumLODLevel;
- UnityEngine.QualitySettings.maxQueuedFrames = qs.MaxQueuedFrames;
- UnityEngine.QualitySettings.particleRaycastBudget = qs.ParticleRaycastBudget;
- UnityEngine.QualitySettings.pixelLightCount = qs.PixelLightCount;
- UnityEngine.QualitySettings.realtimeReflectionProbes = qs.RealtimeReflectionProbes;
- UnityEngine.QualitySettings.resolutionScalingFixedDPIFactor = qs.ResolutionScalingFixedDPIFactor;
- UnityEngine.QualitySettings.shadowCascade2Split = qs.ShadowCascade2Split;
- // TODO shadowCascade4Split
- UnityEngine.QualitySettings.shadowCascades = qs.ShadowCascades;
- UnityEngine.QualitySettings.shadowDistance = qs.ShadowDistance;
- UnityEngine.QualitySettings.shadowmaskMode = (UnityEngine.ShadowmaskMode)Enum.Parse(typeof(UnityEngine.ShadowmaskMode), qs.ShadowmaskMode);
- UnityEngine.QualitySettings.shadowNearPlaneOffset = qs.ShadowNearPlaneOffset;
- UnityEngine.QualitySettings.shadowProjection = (UnityEngine.ShadowProjection)Enum.Parse(typeof(UnityEngine.ShadowProjection), qs.ShadowProjection);
- UnityEngine.QualitySettings.shadowResolution = (UnityEngine.ShadowResolution)Enum.Parse(typeof(UnityEngine.ShadowResolution), qs.ShadowResolution);
- UnityEngine.QualitySettings.shadows = (UnityEngine.ShadowQuality)Enum.Parse(typeof(UnityEngine.ShadowQuality), qs.Shadows);
- UnityEngine.QualitySettings.skinWeights = (UnityEngine.SkinWeights)Enum.Parse(typeof(UnityEngine.SkinWeights), qs.SkinWeights);
- UnityEngine.QualitySettings.softParticles = qs.SoftParticles;
- UnityEngine.QualitySettings.softVegetation = qs.SoftVegetation;
- UnityEngine.QualitySettings.streamingMipmapsActive = qs.StreamingMipmapsActive;
- UnityEngine.QualitySettings.streamingMipmapsAddAllCameras = qs.StreamingMipmapsAddAllCameras;
- UnityEngine.QualitySettings.streamingMipmapsMaxFileIORequests = qs.StreamingMipmapsMaxFileIORequests;
- UnityEngine.QualitySettings.streamingMipmapsMaxLevelReduction = qs.StreamingMipmapsMaxLevelReduction;
- UnityEngine.QualitySettings.streamingMipmapsMemoryBudget = qs.StreamingMipmapsMemoryBudget;
- //UnityEngine.QualitySettings.streamingMipmapsRenderersPerFrame = qs.StreamingMipmapsRendersPerFrame;
- UnityEngine.QualitySettings.vSyncCount = qs.VSyncCount;
- UnityEngine.Application.targetFrameRate = qs.TargetFrameRate;
-
- UnityEngine.Camera.main.fieldOfView = qs.FieldOfView;
- }
-
- // unused methods
-
- public void OnFixedUpdate() { } // called once per physics update
-
- public void OnLevelWasInitialized(int level) { } // called after a level is initialized
-
- public void OnLevelWasLoaded(int level) { } // called after a level is loaded
-
- public void OnUpdate() { } // called once per rendered frame (frame update)
- }
- }
|