From 56a770b718a26d9e35d6c3b8d471cd928a871a90 Mon Sep 17 00:00:00 2001
From: Rich <23438379+Rich-Dunne@users.noreply.github.com>
Date: Tue, 3 Aug 2021 11:07:14 -0600
Subject: [PATCH] Add api (#5)
* Add API
* Added API
* Updated version
* Updated RNUI
* Added checks for null paths
* BelongsToPath menu item now toggles on/off depending if any paths exist
---
SceneManager/API/Functions.cs | 34 +++++++++++++++++++++++++
SceneManager/Managers/BarrierManager.cs | 4 +--
SceneManager/Managers/PathManager.cs | 26 +++++++++++--------
SceneManager/Menus/BarrierMenu.cs | 2 +-
SceneManager/Menus/EditPathMenu.cs | 2 +-
SceneManager/Menus/ExportPathMenu.cs | 4 +--
SceneManager/Properties/AssemblyInfo.cs | 4 +--
SceneManager/SceneManager.csproj | 5 ++--
SceneManager/_ConfuserEx/c.crproj | 2 +-
SceneManager/packages.config | 2 +-
10 files changed, 63 insertions(+), 22 deletions(-)
create mode 100644 SceneManager/API/Functions.cs
diff --git a/SceneManager/API/Functions.cs b/SceneManager/API/Functions.cs
new file mode 100644
index 0000000..8c54af0
--- /dev/null
+++ b/SceneManager/API/Functions.cs
@@ -0,0 +1,34 @@
+using Rage;
+using SceneManager.Managers;
+
+namespace SceneManager.API
+{
+ public static class Functions
+ {
+ ///
+ /// Import paths from the Saved Paths folder and load them into the game world.
+ ///
+ /// The name of the file containing the path (extension excluded).
+ /// Specify the path from where the file will be loaded from.
+ public static void LoadPathsFromFile(string fileName, string filePath = "")
+ {
+ if(PathManager.ImportedPaths.ContainsKey(fileName))
+ {
+ Game.LogTrivial($"A file with that name is already loaded.");
+ return;
+ }
+
+ var importedPaths = PathManager.ImportPathsFromFile(fileName, filePath);
+ PathManager.LoadImportedPaths(importedPaths, fileName);
+ }
+
+ ///
+ /// Delete paths loaded from .
+ ///
+ public static void DeleteLoadedPaths()
+ {
+ PathManager.DeleteAllPaths();
+ PathManager.ImportedPaths.Clear();
+ }
+ }
+}
diff --git a/SceneManager/Managers/BarrierManager.cs b/SceneManager/Managers/BarrierManager.cs
index 211ccb9..15efc91 100644
--- a/SceneManager/Managers/BarrierManager.cs
+++ b/SceneManager/Managers/BarrierManager.cs
@@ -149,7 +149,7 @@ namespace SceneManager.Managers
if (barrier != null && BarrierMenu.BelongsToPath.Checked)
{
- var matchingPath = PathManager.Paths.FirstOrDefault(x => x.Name == BarrierMenu.AddToPath.OptionText);
+ var matchingPath = PathManager.Paths.FirstOrDefault(x => x != null && x.Name == BarrierMenu.AddToPath.OptionText);
if(matchingPath != null)
{
matchingPath.Barriers.Add(barrier);
@@ -257,7 +257,7 @@ namespace SceneManager.Managers
return;
}
- var pathToAssignTo = PathManager.Paths.First(x => x.Name == BarrierMenu.AddUnassignedToPath.OptionText);
+ var pathToAssignTo = PathManager.Paths.First(x => x != null && x.Name == BarrierMenu.AddUnassignedToPath.OptionText);
foreach (Barrier barrier in unassignedBarriers)
{
pathToAssignTo.Barriers.Add(barrier);
diff --git a/SceneManager/Managers/PathManager.cs b/SceneManager/Managers/PathManager.cs
index 26016e0..064bb68 100644
--- a/SceneManager/Managers/PathManager.cs
+++ b/SceneManager/Managers/PathManager.cs
@@ -54,7 +54,7 @@ namespace SceneManager.Managers
internal static void UpdateWaypoint()
{
- var currentPath = Paths.FirstOrDefault(x => x.Name == PathMainMenu.EditPath.OptionText);
+ var currentPath = Paths.FirstOrDefault(x => x != null && x.Name == PathMainMenu.EditPath.OptionText);
var currentWaypoint = currentPath.Waypoints[EditWaypointMenu.EditWaypoint.Index];
DrivingFlagType drivingFlag = EditWaypointMenu.DirectWaypointBehavior.Checked ? DrivingFlagType.Direct : DrivingFlagType.Normal;
@@ -198,27 +198,33 @@ namespace SceneManager.Managers
Menus.MainMenu.Build();
}
- internal static List ImportPathsFromFile(string file)
+ internal static List ImportPathsFromFile(string fileName, string filePath = "")
{
- List importedPaths;
var GAME_DIRECTORY = Directory.GetCurrentDirectory();
- var SAVED_PATHS_DIRECTORY = GAME_DIRECTORY + "\\plugins\\SceneManager\\Saved Paths\\";
- if (!Directory.Exists(SAVED_PATHS_DIRECTORY))
+ var PATH_FILE_DIRECTORY = GAME_DIRECTORY + "\\plugins\\SceneManager\\Saved Paths\\";
+
+ if(filePath != "")
{
- Game.LogTrivial($"Directory '\\plugins\\SceneManager\\Saved Paths' does not exist. No paths available to import.");
+ PATH_FILE_DIRECTORY = filePath;
+ }
+
+ if (!Directory.Exists(PATH_FILE_DIRECTORY))
+ {
+ Game.LogTrivial($"Directory {PATH_FILE_DIRECTORY} does not exist. No paths available to import.");
return null;
}
+ List importedPaths;
var overrides = Serializer.DefineOverrides();
try
{
- importedPaths = Serializer.LoadItemFromXML>(SAVED_PATHS_DIRECTORY + Path.GetFileName(file) + ".xml", overrides);
- ImportedPaths.Add(file, importedPaths);
+ importedPaths = Serializer.LoadItemFromXML>(PATH_FILE_DIRECTORY + Path.GetFileName(fileName) + ".xml", overrides);
+ ImportedPaths.Add(fileName, importedPaths);
}
catch (Exception ex)
{
- Game.DisplayNotification($"~y~Scene Manager ~w~[~r~ERROR~w~]: There was a problem importing file ~b~{file}~w~. This is likely due to an XML error. Double check any changes you've made to this file.");
+ Game.DisplayNotification($"~y~Scene Manager ~w~[~r~ERROR~w~]: There was a problem importing file ~b~{fileName}~w~. This is likely due to an XML error. Double check any changes you've made to this file.");
Game.LogTrivial($"Error: {ex.Message}");
return null;
}
@@ -238,7 +244,7 @@ namespace SceneManager.Managers
if (Game.IsKeyDown(Keys.Y))
{
- var pathToReplace = Paths.First(x => x.Name == path.Name);
+ var pathToReplace = Paths.First(x => x != null && x.Name == path.Name);
var pathToReplaceIndex = Array.IndexOf(Paths, pathToReplace);
pathToReplace.Delete();
Paths[pathToReplaceIndex] = path;
diff --git a/SceneManager/Menus/BarrierMenu.cs b/SceneManager/Menus/BarrierMenu.cs
index 7335a68..1e0d3ac 100644
--- a/SceneManager/Menus/BarrierMenu.cs
+++ b/SceneManager/Menus/BarrierMenu.cs
@@ -61,7 +61,7 @@ namespace SceneManager.Menus
//setBarrierTrafficLight.Index = 3;
}
Menu.AddItem(BelongsToPath);
- BelongsToPath.Enabled = PathManager.Paths.Count() > 0 ? true : false;
+ BelongsToPath.Enabled = PathManager.Paths.Any(x => x != null);
BelongsToPath.Checked = false;
AddToPath = new UIMenuListScrollerItem("Path", "The path the barrier will be saved with when the path is exported.", PathManager.Paths.Where(x => x != null).Select(x => x.Name));
diff --git a/SceneManager/Menus/EditPathMenu.cs b/SceneManager/Menus/EditPathMenu.cs
index 98d18d3..a525272 100644
--- a/SceneManager/Menus/EditPathMenu.cs
+++ b/SceneManager/Menus/EditPathMenu.cs
@@ -80,7 +80,7 @@ namespace SceneManager
if (checkboxItem == DisablePath)
{
//var currentPath = PathManager.Paths[PathMainMenu.EditPath.Index];
- var currentPath = PathManager.Paths.FirstOrDefault(x => x.Name == PathMainMenu.EditPath.OptionText);
+ var currentPath = PathManager.Paths.FirstOrDefault(x => x != null && x.Name == PathMainMenu.EditPath.OptionText);
if(currentPath == null)
{
return;
diff --git a/SceneManager/Menus/ExportPathMenu.cs b/SceneManager/Menus/ExportPathMenu.cs
index 16e7e12..5eadd6d 100644
--- a/SceneManager/Menus/ExportPathMenu.cs
+++ b/SceneManager/Menus/ExportPathMenu.cs
@@ -89,7 +89,7 @@ namespace SceneManager.Menus
var checkedItems = checkboxItems.Where(x => x.Checked);
foreach(UIMenuCheckboxItem checkedItem in checkedItems)
{
- var pathToExport = PathManager.Paths.First(x => x.Name == checkedItem.Text);
+ var pathToExport = PathManager.Paths.First(x => x != null && x.Name == checkedItem.Text);
ExportPaths.Add(pathToExport);
}
@@ -97,7 +97,7 @@ namespace SceneManager.Menus
{
foreach (UIMenuCheckboxItem menuItem in checkedItems)
{
- var pathToExport = PathManager.Paths.First(x => x.Name == menuItem.Text);
+ var pathToExport = PathManager.Paths.First(x => x != null && x.Name == menuItem.Text);
ExportAsIndividualFile(pathToExport);
}
}
diff --git a/SceneManager/Properties/AssemblyInfo.cs b/SceneManager/Properties/AssemblyInfo.cs
index 2514f01..d861f6a 100644
--- a/SceneManager/Properties/AssemblyInfo.cs
+++ b/SceneManager/Properties/AssemblyInfo.cs
@@ -31,5 +31,5 @@ using System.Runtime.InteropServices;
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
-[assembly: AssemblyVersion("2.3.2.0")]
-[assembly: AssemblyFileVersion("2.3.2.0")]
+[assembly: AssemblyVersion("2.3.3.0")]
+[assembly: AssemblyFileVersion("2.3.3.0")]
diff --git a/SceneManager/SceneManager.csproj b/SceneManager/SceneManager.csproj
index 53b73f6..bf121f6 100644
--- a/SceneManager/SceneManager.csproj
+++ b/SceneManager/SceneManager.csproj
@@ -36,8 +36,8 @@
..\packages\InputManager.1.0.0\lib\InputManager.dll
-
- ..\packages\RAGENativeUI.1.8.0\lib\net472\RAGENativeUI.dll
+
+ ..\packages\RAGENativeUI.1.8.1\lib\net472\RAGENativeUI.dll
..\packages\RagePluginHook.1.86.1\lib\net472\RagePluginHook.dll
@@ -62,6 +62,7 @@
+
diff --git a/SceneManager/_ConfuserEx/c.crproj b/SceneManager/_ConfuserEx/c.crproj
index 122b30f..0d9460b 100644
--- a/SceneManager/_ConfuserEx/c.crproj
+++ b/SceneManager/_ConfuserEx/c.crproj
@@ -13,8 +13,8 @@
..\..\..\packages\InputManager.1.0.0\lib
-..\..\..\packages\RAGENativeUI.1.8.0\lib\net472
..\..\..\packages\RagePluginHook.1.86.1\lib\net472
C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.8
C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.8\Facades
+..\..\..\packages\RAGENativeUI.1.8.1\lib\net472
diff --git a/SceneManager/packages.config b/SceneManager/packages.config
index d85b8f7..6319104 100644
--- a/SceneManager/packages.config
+++ b/SceneManager/packages.config
@@ -2,6 +2,6 @@
-
+
\ No newline at end of file