Skip to content

Commit

Permalink
Merge pull request #8 from aviboddu/cli_argument_integration
Browse files Browse the repository at this point in the history
Added CLI overrides to video manager settings
  • Loading branch information
aviboddu committed Dec 30, 2023
2 parents f5f829a + 876412d commit f5e37ce
Showing 1 changed file with 38 additions and 4 deletions.
42 changes: 38 additions & 4 deletions utilities/managers/VideoManager.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,8 @@
using System;
using System.Collections.Generic;
using System.Data;
using System.Diagnostics;
using System.Linq;
using Godot;

namespace Utilities;
Expand Down Expand Up @@ -117,10 +121,20 @@ public override void _Ready()
if (Configuration.Instance.HasSection(VIDEO_SECTION))
{
Logger.WriteInfo("VideoManager::_Ready() - Initializing Settings from Configuration");
Resolution = Configuration.Instance.GetSetting<Vector2I>(VIDEO_SECTION, PropertyName.Resolution); // Must be after changing window mode, otherwise might be overwritten
WindowMode = (WinMode)Configuration.Instance.GetSetting<int>(VIDEO_SECTION, PropertyName.WindowMode);
RefreshRate = Configuration.Instance.GetSetting<int>(VIDEO_SECTION, PropertyName.RefreshRate);
VSyncMode = (DisplayServer.VSyncMode)Configuration.Instance.GetSetting<int>(VIDEO_SECTION, PropertyName.VSyncMode);

HashSet<string> cmdArgs = ParseCmdKeys();
if (!cmdArgs.Contains("resolution"))
Resolution = Configuration.Instance.GetSetting<Vector2I>(VIDEO_SECTION, PropertyName.Resolution);

string[] windowModeRelatedArgs = ["f", "w", "m", "fullscreen", "windowed", "maximized"];
if (!windowModeRelatedArgs.Any(cmdArgs.Contains))
WindowMode = (WinMode)Configuration.Instance.GetSetting<int>(VIDEO_SECTION, PropertyName.WindowMode);

if (!cmdArgs.Contains("fixed-fps"))
RefreshRate = Configuration.Instance.GetSetting<int>(VIDEO_SECTION, PropertyName.RefreshRate);

if (!cmdArgs.Contains("disable-vsync"))
VSyncMode = (DisplayServer.VSyncMode)Configuration.Instance.GetSetting<int>(VIDEO_SECTION, PropertyName.VSyncMode);
}
else
{
Expand All @@ -136,4 +150,24 @@ public override void _Ready()

Logger.WriteDebug($"VideoManager::_Ready() - Time to Initialize {Time.GetTicksMsec() - ticks} ms");
}

private static HashSet<string> ParseCmdKeys()
{
HashSet<string> cmd = new(OS.GetCmdlineArgs().Length + OS.GetCmdlineUserArgs().Length);
foreach (string s in OS.GetCmdlineArgs())
cmd.Add(ParseArgKey(s));
foreach (string s in OS.GetCmdlineUserArgs())
cmd.Add(ParseArgKey(s));
return cmd;
}

private static string ParseArgKey(string s)
{
int equalsIndex = s.IndexOf('=');

s = s.TrimStart('-');
if (equalsIndex != -1)
return s[..(equalsIndex - 1)];
return s;
}
}

0 comments on commit f5e37ce

Please sign in to comment.