mirror of
https://github.com/thegeneralist01/Scene-Manager-DevRepo
synced 2026-01-11 15:40:29 +01:00
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
This commit is contained in:
parent
d118513185
commit
56a770b718
10 changed files with 63 additions and 22 deletions
34
SceneManager/API/Functions.cs
Normal file
34
SceneManager/API/Functions.cs
Normal file
|
|
@ -0,0 +1,34 @@
|
||||||
|
using Rage;
|
||||||
|
using SceneManager.Managers;
|
||||||
|
|
||||||
|
namespace SceneManager.API
|
||||||
|
{
|
||||||
|
public static class Functions
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Import paths from the Saved Paths folder and load them into the game world.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="fileName">The name of the file containing the path (extension excluded).</param>
|
||||||
|
/// <param name="filePath">Specify the path from where the file will be loaded from.</param>
|
||||||
|
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);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Delete paths loaded from <see cref="LoadPathsFromFile"/>.
|
||||||
|
/// </summary>
|
||||||
|
public static void DeleteLoadedPaths()
|
||||||
|
{
|
||||||
|
PathManager.DeleteAllPaths();
|
||||||
|
PathManager.ImportedPaths.Clear();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -149,7 +149,7 @@ namespace SceneManager.Managers
|
||||||
|
|
||||||
if (barrier != null && BarrierMenu.BelongsToPath.Checked)
|
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)
|
if(matchingPath != null)
|
||||||
{
|
{
|
||||||
matchingPath.Barriers.Add(barrier);
|
matchingPath.Barriers.Add(barrier);
|
||||||
|
|
@ -257,7 +257,7 @@ namespace SceneManager.Managers
|
||||||
return;
|
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)
|
foreach (Barrier barrier in unassignedBarriers)
|
||||||
{
|
{
|
||||||
pathToAssignTo.Barriers.Add(barrier);
|
pathToAssignTo.Barriers.Add(barrier);
|
||||||
|
|
|
||||||
|
|
@ -54,7 +54,7 @@ namespace SceneManager.Managers
|
||||||
|
|
||||||
internal static void UpdateWaypoint()
|
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];
|
var currentWaypoint = currentPath.Waypoints[EditWaypointMenu.EditWaypoint.Index];
|
||||||
DrivingFlagType drivingFlag = EditWaypointMenu.DirectWaypointBehavior.Checked ? DrivingFlagType.Direct : DrivingFlagType.Normal;
|
DrivingFlagType drivingFlag = EditWaypointMenu.DirectWaypointBehavior.Checked ? DrivingFlagType.Direct : DrivingFlagType.Normal;
|
||||||
|
|
||||||
|
|
@ -198,27 +198,33 @@ namespace SceneManager.Managers
|
||||||
Menus.MainMenu.Build();
|
Menus.MainMenu.Build();
|
||||||
}
|
}
|
||||||
|
|
||||||
internal static List<Paths.Path> ImportPathsFromFile(string file)
|
internal static List<Paths.Path> ImportPathsFromFile(string fileName, string filePath = "")
|
||||||
{
|
{
|
||||||
List<Paths.Path> importedPaths;
|
|
||||||
var GAME_DIRECTORY = Directory.GetCurrentDirectory();
|
var GAME_DIRECTORY = Directory.GetCurrentDirectory();
|
||||||
var SAVED_PATHS_DIRECTORY = GAME_DIRECTORY + "\\plugins\\SceneManager\\Saved Paths\\";
|
var PATH_FILE_DIRECTORY = GAME_DIRECTORY + "\\plugins\\SceneManager\\Saved Paths\\";
|
||||||
if (!Directory.Exists(SAVED_PATHS_DIRECTORY))
|
|
||||||
|
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;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
List<Paths.Path> importedPaths;
|
||||||
var overrides = Serializer.DefineOverrides();
|
var overrides = Serializer.DefineOverrides();
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
importedPaths = Serializer.LoadItemFromXML<List<Paths.Path>>(SAVED_PATHS_DIRECTORY + Path.GetFileName(file) + ".xml", overrides);
|
importedPaths = Serializer.LoadItemFromXML<List<Paths.Path>>(PATH_FILE_DIRECTORY + Path.GetFileName(fileName) + ".xml", overrides);
|
||||||
ImportedPaths.Add(file, importedPaths);
|
ImportedPaths.Add(fileName, importedPaths);
|
||||||
|
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
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}");
|
Game.LogTrivial($"Error: {ex.Message}");
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
@ -238,7 +244,7 @@ namespace SceneManager.Managers
|
||||||
|
|
||||||
if (Game.IsKeyDown(Keys.Y))
|
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);
|
var pathToReplaceIndex = Array.IndexOf(Paths, pathToReplace);
|
||||||
pathToReplace.Delete();
|
pathToReplace.Delete();
|
||||||
Paths[pathToReplaceIndex] = path;
|
Paths[pathToReplaceIndex] = path;
|
||||||
|
|
|
||||||
|
|
@ -61,7 +61,7 @@ namespace SceneManager.Menus
|
||||||
//setBarrierTrafficLight.Index = 3;
|
//setBarrierTrafficLight.Index = 3;
|
||||||
}
|
}
|
||||||
Menu.AddItem(BelongsToPath);
|
Menu.AddItem(BelongsToPath);
|
||||||
BelongsToPath.Enabled = PathManager.Paths.Count() > 0 ? true : false;
|
BelongsToPath.Enabled = PathManager.Paths.Any(x => x != null);
|
||||||
BelongsToPath.Checked = false;
|
BelongsToPath.Checked = false;
|
||||||
|
|
||||||
AddToPath = new UIMenuListScrollerItem<string>("Path", "The path the barrier will be saved with when the path is exported.", PathManager.Paths.Where(x => x != null).Select(x => x.Name));
|
AddToPath = new UIMenuListScrollerItem<string>("Path", "The path the barrier will be saved with when the path is exported.", PathManager.Paths.Where(x => x != null).Select(x => x.Name));
|
||||||
|
|
|
||||||
|
|
@ -80,7 +80,7 @@ namespace SceneManager
|
||||||
if (checkboxItem == DisablePath)
|
if (checkboxItem == DisablePath)
|
||||||
{
|
{
|
||||||
//var currentPath = PathManager.Paths[PathMainMenu.EditPath.Index];
|
//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)
|
if(currentPath == null)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
|
|
|
||||||
|
|
@ -89,7 +89,7 @@ namespace SceneManager.Menus
|
||||||
var checkedItems = checkboxItems.Where(x => x.Checked);
|
var checkedItems = checkboxItems.Where(x => x.Checked);
|
||||||
foreach(UIMenuCheckboxItem checkedItem in checkedItems)
|
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);
|
ExportPaths.Add(pathToExport);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -97,7 +97,7 @@ namespace SceneManager.Menus
|
||||||
{
|
{
|
||||||
foreach (UIMenuCheckboxItem menuItem in checkedItems)
|
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);
|
ExportAsIndividualFile(pathToExport);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -31,5 +31,5 @@ using System.Runtime.InteropServices;
|
||||||
// You can specify all the values or you can default the Build and Revision Numbers
|
// You can specify all the values or you can default the Build and Revision Numbers
|
||||||
// by using the '*' as shown below:
|
// by using the '*' as shown below:
|
||||||
// [assembly: AssemblyVersion("1.0.*")]
|
// [assembly: AssemblyVersion("1.0.*")]
|
||||||
[assembly: AssemblyVersion("2.3.2.0")]
|
[assembly: AssemblyVersion("2.3.3.0")]
|
||||||
[assembly: AssemblyFileVersion("2.3.2.0")]
|
[assembly: AssemblyFileVersion("2.3.3.0")]
|
||||||
|
|
|
||||||
|
|
@ -36,8 +36,8 @@
|
||||||
<Reference Include="InputManager, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
|
<Reference Include="InputManager, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
|
||||||
<HintPath>..\packages\InputManager.1.0.0\lib\InputManager.dll</HintPath>
|
<HintPath>..\packages\InputManager.1.0.0\lib\InputManager.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="RAGENativeUI, Version=1.8.0.0, Culture=neutral, processorArchitecture=AMD64">
|
<Reference Include="RAGENativeUI, Version=1.8.1.0, Culture=neutral, processorArchitecture=AMD64">
|
||||||
<HintPath>..\packages\RAGENativeUI.1.8.0\lib\net472\RAGENativeUI.dll</HintPath>
|
<HintPath>..\packages\RAGENativeUI.1.8.1\lib\net472\RAGENativeUI.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="RagePluginHook, Version=0.0.0.0, Culture=neutral, processorArchitecture=AMD64">
|
<Reference Include="RagePluginHook, Version=0.0.0.0, Culture=neutral, processorArchitecture=AMD64">
|
||||||
<HintPath>..\packages\RagePluginHook.1.86.1\lib\net472\RagePluginHook.dll</HintPath>
|
<HintPath>..\packages\RagePluginHook.1.86.1\lib\net472\RagePluginHook.dll</HintPath>
|
||||||
|
|
@ -62,6 +62,7 @@
|
||||||
<Reference Include="System.Xml" />
|
<Reference Include="System.Xml" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
<Compile Include="API\Functions.cs" />
|
||||||
<Compile Include="Menus\DriverMenu.cs" />
|
<Compile Include="Menus\DriverMenu.cs" />
|
||||||
<Compile Include="Menus\ExportPathMenu.cs" />
|
<Compile Include="Menus\ExportPathMenu.cs" />
|
||||||
<Compile Include="Menus\ImportPathMenu.cs" />
|
<Compile Include="Menus\ImportPathMenu.cs" />
|
||||||
|
|
|
||||||
|
|
@ -13,8 +13,8 @@
|
||||||
</rule>
|
</rule>
|
||||||
</module>
|
</module>
|
||||||
<probePath>..\..\..\packages\InputManager.1.0.0\lib</probePath>
|
<probePath>..\..\..\packages\InputManager.1.0.0\lib</probePath>
|
||||||
<probePath>..\..\..\packages\RAGENativeUI.1.8.0\lib\net472</probePath>
|
|
||||||
<probePath>..\..\..\packages\RagePluginHook.1.86.1\lib\net472</probePath>
|
<probePath>..\..\..\packages\RagePluginHook.1.86.1\lib\net472</probePath>
|
||||||
<probePath>C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.8</probePath>
|
<probePath>C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.8</probePath>
|
||||||
<probePath>C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.8\Facades</probePath>
|
<probePath>C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.8\Facades</probePath>
|
||||||
|
<probePath>..\..\..\packages\RAGENativeUI.1.8.1\lib\net472</probePath>
|
||||||
</project>
|
</project>
|
||||||
|
|
|
||||||
|
|
@ -2,6 +2,6 @@
|
||||||
<packages>
|
<packages>
|
||||||
<package id="InputManager" version="1.0.0" targetFramework="net48" />
|
<package id="InputManager" version="1.0.0" targetFramework="net48" />
|
||||||
<package id="Microsoft.CSharp" version="4.7.0" targetFramework="net48" />
|
<package id="Microsoft.CSharp" version="4.7.0" targetFramework="net48" />
|
||||||
<package id="RAGENativeUI" version="1.8.0" targetFramework="net48" />
|
<package id="RAGENativeUI" version="1.8.1" targetFramework="net48" />
|
||||||
<package id="RagePluginHook" version="1.86.1" targetFramework="net48" />
|
<package id="RagePluginHook" version="1.86.1" targetFramework="net48" />
|
||||||
</packages>
|
</packages>
|
||||||
Loading…
Add table
Add a link
Reference in a new issue