Browse Source

Add potential fix for Unity setting the screen resolution too small

tags/v0.0.2
NGnius (Graham) 3 years ago
parent
commit
9b00055a02
3 changed files with 57 additions and 2 deletions
  1. +2
    -1
      CLre/CLre.cs
  2. +52
    -0
      CLre/Fixes/MiniScreenEmbiggener.cs
  3. +3
    -1
      CLre/Fixes/StartupSpeedup.cs

+ 2
- 1
CLre/CLre.cs View File

@@ -48,6 +48,7 @@ namespace CLre
// patches for bugs
Fixes.InitLogSooner.Init();
Fixes.MiniScreenHelper.Init();
// misc
LogIPAPlugins();
@@ -118,7 +119,7 @@ namespace CLre
int modCount = IllusionInjector.PluginManager.Plugins.Count();
StringBuilder sb = new StringBuilder();
sb.AppendFormat(" {0} {1}\n", Name, Version);
sb.AppendFormat("{0} bugfixes, {1} plugins, no frills", fixCount, modCount);
sb.AppendFormat("{0} bugfixes, {1} plugins, no frills\n", fixCount, modCount);
#if DEBUG
sb.AppendFormat(" DEBUG version\n");
#endif


+ 52
- 0
CLre/Fixes/MiniScreenEmbiggener.cs View File

@@ -0,0 +1,52 @@
using System.Runtime.CompilerServices;
using UnityEngine;

namespace CLre.Fixes
{
[Bugfix(name = "MiniScreenEmbiggener",
more = "https://trello.com/c/NAls3XaE/17-game-starts-minimized-and-wont-restore",
description = "Go into fullscreen when Unity does dumb display stuff",
component = BugfixType.Initialiser, id = 6)]
public static class MiniScreenHelper
{
private const int WIDTH_MINIMUM = 200;
private const int HEIGHT_MINIMUM = 200;
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static void Init()
{
if (Screen.width < WIDTH_MINIMUM || Screen.height < HEIGHT_MINIMUM)
{
// fix screen that's too small
API.Utility.Logging.LogWarning($"Window is too small! (detected: {Screen.width}x{Screen.height})");
if (Screen.resolutions.Length > 0)
{
Resolution r = Screen.resolutions[Screen.resolutions.Length - 1];
Screen.SetResolution(r.width, r.height, true);
API.Utility.Logging.MetaLog($"Set screen resolution to {r.width}x{r.height} (fullscreen)");
}
else
{
// no resolutions, try some stuff to fix this (this is basically a bunch of random guesses)
API.Utility.Logging.LogError("No screen resolutions available, hopefully it'll be ok eventually...");
Screen.fullScreen = true;
Display.onDisplaysUpdated += () => // hope displays update fixes things
{
API.Utility.Logging.MetaLog("Displays updated");
if (Screen.resolutions.Length > 0)
{
Resolution r = Screen.resolutions[Screen.resolutions.Length - 1];
Screen.SetResolution(r.width, r.height, true);
API.Utility.Logging.MetaLog($"Set screen resolution to {r.width}x{r.height} (fullscreen)");
}
};
// log displays to help debug this issue
foreach (var display in Display.displays)
{
API.Utility.Logging.MetaLog($"Display: {display.renderingWidth}x{display.renderingHeight} (sys: {display.systemWidth}x{display.systemHeight}) Active? {display.active}");
}
}
}
}
}
}

+ 3
- 1
CLre/Fixes/StartupSpeedup.cs View File

@@ -3,6 +3,7 @@ using System.Linq;
using System.Reflection;
using HarmonyLib;

#if DEBUG
namespace CLre.Fixes
{
public class StartupSpeedup
@@ -54,4 +55,5 @@ namespace CLre.Fixes
Speedup_Benchmark.test = Stopwatch.StartNew();
}
}
}
}
#endif

Loading…
Cancel
Save