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