From 910c4bcc1616bdff8e5d58c4c0b28c7b41153b08 Mon Sep 17 00:00:00 2001 From: Rich Dunne Date: Fri, 7 May 2021 04:03:13 -0600 Subject: [PATCH] Added separate menu for managing drivers --- SceneManager/Menus/DriverMenu.cs | 74 ++++++++++++++++++++++++++++++++ 1 file changed, 74 insertions(+) create mode 100644 SceneManager/Menus/DriverMenu.cs diff --git a/SceneManager/Menus/DriverMenu.cs b/SceneManager/Menus/DriverMenu.cs new file mode 100644 index 0000000..fda516c --- /dev/null +++ b/SceneManager/Menus/DriverMenu.cs @@ -0,0 +1,74 @@ +using Rage; +using RAGENativeUI; +using RAGENativeUI.Elements; +using SceneManager.CollectedPeds; +using SceneManager.Managers; +using SceneManager.Utils; +using SceneManager.Waypoints; +using System.Collections.Generic; +using System.Drawing; +using System.Linq; + +namespace SceneManager.Menus +{ + internal class DriverMenu + { + internal static UIMenu Menu = new UIMenu("Scene Manager", "~o~Driver Menu"); + private static string[] DismissOptions { get; } = new string[] { "From path", "From waypoint", "From world" }; + internal static UIMenuListScrollerItem DirectOptions { get; } = new UIMenuListScrollerItem("Direct driver to path's", "", new[] { "First waypoint", "Nearest waypoint" }); + internal static UIMenuListScrollerItem DirectDriver { get; private set; } + internal static UIMenuListScrollerItem DismissDriver { get; } = new UIMenuListScrollerItem("Dismiss nearest driver", $"~b~From path: ~w~Driver will be released from the path\n~b~From waypoint: ~w~Driver will skip their current waypoint task\n~b~From world: ~w~Driver will be removed from the world.", DismissOptions); + + internal static void Initialize() + { + Menu.ParentMenu = PathMainMenu.Menu; + MenuManager.MenuPool.Add(Menu); + + Menu.OnItemSelect += DriverMenu_OnItemSelected; + Menu.OnMenuOpen += DriverMenu_OnMenuOpen; + } + + internal static void Build() + { + Menu.Clear(); + + Menu.AddItem(DirectOptions); + DirectOptions.Enabled = true; + Menu.AddItem(DirectDriver = new UIMenuListScrollerItem("Direct nearest driver to path", "", PathManager.Paths.Select(x => x.Name))); // This must instantiate here because the Paths change + DirectDriver.ForeColor = Color.Gold; + DirectDriver.Enabled = true; + Menu.AddItem(DismissDriver); + DismissDriver.ForeColor = Color.Gold; + + if (PathManager.Paths.Count == 0) + { + DirectOptions.Enabled = false; + DirectDriver.Enabled = false; + } + + Menu.RefreshIndex(); + } + + private static void DriverMenu_OnItemSelected(UIMenu sender, UIMenuItem selectedItem, int index) + { + if (selectedItem == DirectDriver) + { + if (Utils.DirectDriver.ValidateOptions(DirectOptions, PathManager.Paths[DirectDriver.Index], out Vehicle nearbyVehicle, out Waypoint targetWaypoint)) + { + Utils.DirectDriver.Direct(nearbyVehicle, PathManager.Paths[DirectDriver.Index], targetWaypoint); + } + } + + if (selectedItem == DismissDriver) + { + Utils.DismissDriver.Dismiss(DismissDriver.Index); + } + } + + private static void DriverMenu_OnMenuOpen(UIMenu menu) + { + var scrollerItems = new List { DirectOptions, DirectDriver, DismissDriver }; + GameFiber.StartNew(() => UserInput.InitializeMenuMouseControl(menu, scrollerItems), "RNUI Mouse Input Fiber"); + } + } +}