diff --git a/DFUVR/DFUVR.csproj b/DFUVR/DFUVR.csproj
index 52dffab..7c466e6 100644
--- a/DFUVR/DFUVR.csproj
+++ b/DFUVR/DFUVR.csproj
@@ -118,6 +118,7 @@
+
diff --git a/DFUVR/MenuTransition.cs b/DFUVR/MenuTransition.cs
index d166dca..737494a 100644
--- a/DFUVR/MenuTransition.cs
+++ b/DFUVR/MenuTransition.cs
@@ -93,14 +93,15 @@ public static void Done()
Var.fStartMenu = false;
turnStyle = Var.turnOptionsText.text;
dominantHand = Var.handOptionsText.text;
- string filePath = Path.Combine(Paths.PluginPath, "Settings.txt");
- string[] lines = File.ReadAllLines(filePath);
- lines[5] = "false";
+
+ var settings = Settings.LoadFromFile();
+ settings.showStartMenu = false;
Plugin.LoggerInstance.LogInfo("Reached saving part");
- lines[6] = string.Format(CultureInfo.InvariantCulture, dominantHand);
- lines[7] = string.Format(CultureInfo.InvariantCulture, turnStyle);
+ settings.dominantHand = string.Format(CultureInfo.InvariantCulture, dominantHand);
+ settings.turnStyle = string.Format(CultureInfo.InvariantCulture, turnStyle);
Plugin.LoggerInstance.LogInfo($"Saving part ended with {dominantHand} and {turnStyle}");
- File.WriteAllLines(filePath, lines);
+ settings.SaveToFile();
+
Application.Quit();
}
public static void SaveButtonClick(GameObject currentMenu, GameObject nextMenu, bool mainMenuC, bool mainMenuM)
@@ -109,11 +110,12 @@ public static void SaveButtonClick(GameObject currentMenu, GameObject nextMenu,
{
cType = GameObject.Find("CLabel").GetComponent().text;
refresh_rate = GameObject.Find("HzLabel").GetComponent().text;
- string filePath = Path.Combine(Paths.PluginPath, "Settings.txt");
- string[] lines = File.ReadAllLines(filePath);
- lines[2] = string.Format(CultureInfo.InvariantCulture, cType);
- lines[1] = string.Format(CultureInfo.InvariantCulture, refresh_rate);
- File.WriteAllLines(filePath, lines);
+
+ var settings = Settings.LoadFromFile();
+ settings.headsetType = string.Format(CultureInfo.InvariantCulture, cType);
+ settings.headsetRefreshRate = int.Parse(refresh_rate, CultureInfo.InvariantCulture);
+ settings.SaveToFile();
+
MenuTransition(currentMenu, nextMenu, mainMenuC, mainMenuM);
}
catch(Exception e) { Plugin.LoggerInstance.LogError(e); }
diff --git a/DFUVR/Settings.cs b/DFUVR/Settings.cs
new file mode 100644
index 0000000..341cb0e
--- /dev/null
+++ b/DFUVR/Settings.cs
@@ -0,0 +1,90 @@
+using BepInEx;
+using DaggerfallWorkshop;
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace DFUVR
+{
+ internal class Settings
+ {
+ public double heightOffset = -0.989447891712189;
+ public int headsetRefreshRate = 90;
+ public string headsetType = "Oculus/Meta";
+ public string sheathOffset = "-0.1195223,0.07885736,-0.02833132";
+ public int connectedJoysticks = 0;
+ public bool showStartMenu = true;
+ public string dominantHand = "right";
+ public string turnStyle = "snap";
+ public bool toggleRun = true;
+
+ public static Settings LoadFromFile()
+ {
+ try
+ {
+ string filePath = Path.Combine(Paths.PluginPath, "Settings.txt");
+ if (!File.Exists(filePath))
+ {
+ Plugin.LoggerInstance.LogWarning("Settings file not found, creating default settings file and setting default values.");
+ var defaultSettings = new Settings();
+ defaultSettings.SaveToFile();
+
+ return defaultSettings;
+ }
+
+ string[] lines = File.ReadAllLines(filePath);
+
+ Settings settings = new Settings();
+ settings.heightOffset = double.Parse(lines[0].Trim());
+ settings.headsetRefreshRate = int.Parse(lines[1].Trim());
+ settings.headsetType = lines[2].Trim();
+ settings.sheathOffset = lines[3].Trim();
+ settings.connectedJoysticks = int.Parse(lines[4].Trim());
+ settings.showStartMenu = bool.Parse(lines[5].Trim());
+ settings.dominantHand = lines[6].Trim();
+ settings.turnStyle = lines[7].Trim();
+ if (lines.Length > 8)
+ settings.toggleRun = bool.Parse(lines[8].Trim());
+
+ return settings;
+ }
+ catch (Exception ex)
+ {
+ Plugin.LoggerInstance.LogError($"Failed to load Settings.txt: {ex.Message}");
+ return new Settings();
+ }
+ }
+
+ public bool SaveToFile()
+ {
+ string[] lines = new string[]
+ {
+ heightOffset.ToString(),
+ headsetRefreshRate.ToString(),
+ headsetType,
+ sheathOffset,
+ connectedJoysticks.ToString(),
+ showStartMenu.ToString(),
+ dominantHand,
+ turnStyle,
+ toggleRun.ToString()
+ };
+
+ string filePath = Path.Combine(Paths.PluginPath, "Settings.txt");
+ try
+ {
+ File.WriteAllLines(filePath, lines);
+ }
+ catch (Exception ex)
+ {
+ Plugin.LoggerInstance.LogError($"Failed to save Settings.txt: {ex.Message}");
+ return false;
+ }
+
+ return true;
+ }
+ }
+}
diff --git a/DFUVR/Var.cs b/DFUVR/Var.cs
index 65b75a2..fad1fa4 100644
--- a/DFUVR/Var.cs
+++ b/DFUVR/Var.cs
@@ -224,17 +224,18 @@ public static void Initialize()
try //to read the Settings.txt file
{
- string fileContent = FileReader.ReadFromFile(filePath);
- string[] lines = fileContent.Split('\n');
- Debug.Log(lines[2].Trim());
+ var settings = Settings.LoadFromFile();
+ Debug.Log(settings.headsetType);
+
//using only a bool makes the settings file too hard to understand for most people
//bool.TryParse(lines[6], out leftHanded);
- if (lines[6].Trim() == "left") { Var.leftHanded = true; }
+ if (settings.dominantHand == "left") { Var.leftHanded = true; }
//Set the bindings to the default Oculus Touch bindings
//This is not necessary. The default values are already set up for the Touch Controllers
//only if the player ist left handed, change the grip buttons
- if (lines[2].Trim() == "Oculus/Meta")
+ string headset = settings.headsetType;
+ if (headset == "Oculus/Meta")
{
if (Var.leftHanded)
{
@@ -256,7 +257,7 @@ public static void Initialize()
}
//Set the bindings to the default HTC Vive Wand bindings
- if (lines[2].Trim() == "HTC Vive Wands")
+ if (headset == "HTC Vive Wands")
{
left2Button = KeyCode.JoystickButton4;
left1Button = KeyCode.JoystickButton2;
@@ -273,7 +274,7 @@ public static void Initialize()
}
//FOr everything else, we try to let Unity figure it out. Doesn't work very well though and manual controller profiles are necessary for a playable experience
- else if (lines[2].Trim() == "Other")
+ else if (headset == "Other")
{
isNotOculus = true;
@@ -296,19 +297,18 @@ public static void Initialize()
float targetTimeStep;
try
{
- fileContent = FileReader.ReadFromFile(filePath);
//lines = fileContent.Split('\n');
- Debug.Log("Line1:" + lines[0].Trim());
- Debug.Log("Line2:" + lines[1].Trim());
- Var.heightOffset = float.Parse(lines[0].Trim(),CultureInfo.InvariantCulture);
- Plugin.LoggerInstance.LogInfo(Var.heightOffset);
- targetTimeStep = 1f / float.Parse(lines[1].Trim());
+ Debug.Log("Line1:" + settings.heightOffset.ToString(CultureInfo.InvariantCulture));
+ Debug.Log("Line2:" + settings.headsetRefreshRate);
+ heightOffset = settings.heightOffset;
+ Plugin.LoggerInstance.LogInfo(heightOffset);
+ targetTimeStep = 1f / settings.headsetRefreshRate;
Plugin.LoggerInstance.LogInfo(targetTimeStep);
}
catch (Exception e)//if it doesn't work, set it to an emergency default value
{
- Plugin.LoggerInstance.LogError("Made a fucky wucky while reading the file, oopsie! Error: " + e);
+ Plugin.LoggerInstance.LogError("Made a fucky wucky while reading the file, oopsie! Error: " + e.Message);
targetTimeStep = 1f / 90f;
}
try
@@ -331,21 +331,20 @@ public static void Initialize()
Time.fixedDeltaTime = targetTimeStep;
Plugin.LoggerInstance.LogInfo(Time.fixedDeltaTime);
- string rawLine3 = lines[3].Trim();
- Plugin.LoggerInstance.LogInfo(rawLine3);
- string[] sheathVector = rawLine3.Split(',');
+ Plugin.LoggerInstance.LogInfo(settings.sheathOffset);
+ string[] sheathVector = settings.sheathOffset.Split(',');
float x = float.Parse(sheathVector[0], CultureInfo.InvariantCulture);
float y = float.Parse(sheathVector[1], CultureInfo.InvariantCulture);
float z = float.Parse(sheathVector[2], CultureInfo.InvariantCulture);
Plugin.LoggerInstance.LogInfo(x);
Var.sheathOffset=new Vector3(x,y,z);
- bool.TryParse(lines[5], out fStartMenu);
+ fStartMenu = settings.showStartMenu;
//bool.TryParse(lines[6],out leftHanded);
Plugin.LoggerInstance.LogInfo("Offsett: "+Var.sheathOffset.ToString());
- if (lines[7].Trim() == "smooth") { Var.smoothTurn = true;}
+ if (settings.turnStyle == "smooth") { Var.smoothTurn = true;}
Plugin.LoggerInstance.LogInfo("Smooth turn: "+Var.smoothTurn);
- if (lines[7].Trim() == "none") { Var.noTurn = true; }
- bool.TryParse(lines[8],out toggleRun);
+ if (settings.turnStyle == "none") { Var.noTurn = true; }
+ toggleRun = settings.toggleRun;
}
@@ -358,14 +357,12 @@ public static void Initialize()
//THis saves the players height in Settings.txt. Gets called after exiting calibration mode
public static void SaveHeight()
{
- string filePath = Path.Combine(Paths.PluginPath, "Settings.txt");
- string[] lines = File.ReadAllLines(filePath);
+ Settings settings = Settings.LoadFromFile();
+ settings.heightOffset = heightOffset;//Var.heightOffset.ToString();
+ settings.sheathOffset = string.Format(CultureInfo.InvariantCulture, "{0},{1},{2}", sphereObject.transform.localPosition.x, sphereObject.transform.localPosition.y, sphereObject.transform.localPosition.z);//Var.sphereObject.transform.localPosition.ToString();//Var.sheathOffset.ToString();
+ settings.connectedJoysticks = connectedJoysticks;
- lines[0] = string.Format(CultureInfo.InvariantCulture,"{0}", Var.heightOffset);//Var.heightOffset.ToString();
- lines[3] = string.Format(CultureInfo.InvariantCulture, "{0},{1},{2}", Var.sphereObject.transform.localPosition.x, Var.sphereObject.transform.localPosition.y, Var.sphereObject.transform.localPosition.z);//Var.sphereObject.transform.localPosition.ToString();//Var.sheathOffset.ToString();
- lines[4] = connectedJoysticks.ToString();
-
- File.WriteAllLines(filePath, lines);
+ settings.SaveToFile();
}
//deprecated. Ignore.
public static void SaveAxis()