public static void Main() { // Create a fiber to process our menus menusProcessFiber = new GameFiber(ProcessLoop); // Create the MenuPool to easily process our menus menuPool = new MenuPool(); // Create our menus menu1 = CreateMenu("First"); menu2 = CreateMenu("Second"); menu3 = CreateMenu("Third"); menu4 = CreateMenu("Fourth"); // Create the menu switcher menuSwitcher = new UIMenuSwitchMenusItem("Menu", "", new DisplayItem(menu1, "The First"), new DisplayItem(menu2, "The Second"), new DisplayItem(menu3, "The Third"), new DisplayItem(menu4, "The Fourth")); // We use the DisplayItem class to specify the custom text that will appear in the menu switcher; // we can pass the menus directly too and it will use the menu title text instead: // // menuSwitcher = new UIMenuSwitchMenusItem("Menu", "", menu1, menu2, menu3, menu4); // // Add the menu switcher to the menus menu1.AddItem(menuSwitcher, 0); menu2.AddItem(menuSwitcher, 0); menu3.AddItem(menuSwitcher, 0); menu4.AddItem(menuSwitcher, 0); menu1.RefreshIndex(); menu2.RefreshIndex(); menu3.RefreshIndex(); menu4.RefreshIndex(); // Temporal fix to prevent some flickering that happens occasionally when switching menus menuSwitcher.OnListChanged += (s, i) => { menuSwitcher.CurrentMenu.Draw(); }; // Start our process fiber menusProcessFiber.Start(); // Continue with our plugin... in this example, hibernate to prevent it from being unloaded GameFiber.Hibernate(); }
private static void Main() { // create the pool that handles drawing and processing the menus pool = new MenuPool(); // create the menus UIMenu menu1 = CreateMenu("First"); UIMenu menu2 = CreateMenu("Second"); UIMenu menu3 = CreateMenu("Third"); UIMenu menu4 = CreateMenu("Fourth"); UIMenu menu5 = CreateMenu("Fifth"); // create the item that will handle switching between the menus menuSwitcher = new UIMenuSwitchMenusItem("Menu", "", new DisplayItem(menu1, "The First"), new DisplayItem(menu2, "The Second"), new DisplayItem(menu3, "The Third"), new DisplayItem(menu4, "The Fourth"), new DisplayItem(menu5, "The Fifth")); // insert the menu switcher item as the first item of all the menus menu1.AddItem(menuSwitcher, 0); menu2.AddItem(menuSwitcher, 0); menu3.AddItem(menuSwitcher, 0); menu4.AddItem(menuSwitcher, 0); menu5.AddItem(menuSwitcher, 0); // update the description when the selected menu changes menuSwitcher.OnListChanged += (s, i) => menuSwitcher.Description = i switch { 0 => "This is the first menu.", 1 => "This is the second menu.", 2 => "This is the third menu.", 3 => "This is the fourth menu.", 4 => "This is the fifth menu.", _ => "" }; // add all the menus to the pool pool.Add(menu1, menu2, menu3, menu4, menu5); // start the fiber which will handle drawing and processing the menus GameFiber.StartNew(ProcessMenus); // continue with the plugin... Game.Console.Print($" Press {KeyBinding} to open the menu."); Game.DisplayHelp($"Press ~{KeyBinding.GetInstructionalId()}~ to open the menu."); }
public static void InitialiseMenus() { Game.FrameRender += Process; _MenuPool = new MenuPool(); //ChecksMenu = new UIMenu("Checks", ""); //_MenuPool.Add(ChecksMenu); TrafficStopMenu = new UIMenu("Traffic Stop", ""); _MenuPool.Add(TrafficStopMenu); TicketMenu = new UIMenu("Ticket", ""); _MenuPool.Add(TicketMenu); PursuitTacticsMenu = new UIMenu("Pursuit Tactics", ""); PursuitTacticsMenu.AddItem(AutomaticTacticsCheckboxItem = new UIMenuCheckboxItem("Automatic Tactics", EnhancedPursuitAI.DefaultAutomaticAI)); PursuitTacticsMenu.AddItem(PursuitTacticsListItem = new UIMenuListItem("Current Tactic", "", PursuitTacticsOptionsList)); PursuitTacticsListItem.Enabled = false; PursuitTacticsMenu.RefreshIndex(); PursuitTacticsMenu.OnItemSelect += OnItemSelect; PursuitTacticsMenu.OnCheckboxChange += OnCheckboxChange; //TrafficStopMenu.OnListChange += OnListChange; PursuitTacticsMenu.MouseControlsEnabled = false; PursuitTacticsMenu.AllowCameraMovement = true; _MenuPool.Add(PursuitTacticsMenu); Dictionary <UIMenu, string> UIMenus_Categories = new Dictionary <UIMenu, string>(); foreach (string category in Offence.CategorizedTrafficOffences.Keys) { UIMenu newcategorymenu = new UIMenu(category, "LSPDFR+ offences"); OffenceCategoryMenus.Add(newcategorymenu); UIMenus_Categories.Add(newcategorymenu, category); } OffenceCategorySwitchItem = new UIMenuSwitchMenusItem("Categories", "", OffenceCategoryMenus); foreach (UIMenu newcategorymenu in OffenceCategoryMenus) { newcategorymenu.AddItem(OffenceCategorySwitchItem); string category = UIMenus_Categories[newcategorymenu]; foreach (string reason in Offence.CategorizedTrafficOffences[category].Select(x => x.name)) { UIMenuCheckboxItem newcheckboxitem = new UIMenuCheckboxItem(reason, false); newcategorymenu.AddItem(newcheckboxitem); CheckboxItems_Offences.Add(new Tuple <UIMenuCheckboxItem, Offence>(newcheckboxitem, Offence.CategorizedTrafficOffences[category].FirstOrDefault(x => x.name == reason))); } newcategorymenu.OnMenuClose += OnMenuClose; newcategorymenu.RefreshIndex(); newcategorymenu.AllowCameraMovement = true; newcategorymenu.MouseControlsEnabled = false; _MenuPool.Add(newcategorymenu); } var speech = new List <dynamic>() { "Hello", "Insult", "Kifflom", "Thanks", "Swear", "Warn", "Threaten" }; TrafficStopMenu.AddItem(SpeechItem = new UIMenuListItem("Speech", "", speech)); TrafficStopMenu.AddItem(IDItem = new UIMenuListItem("Ask for identification", "", OccupantSelector)); TrafficStopMenu.AddItem(QuestionDriverItem = new UIMenuItem("Question driver")); TrafficStopMenu.AddItem(PenaltyItem = new UIMenuItem("Issue Penalty")); TrafficStopMenu.AddItem(WarningItem = new UIMenuItem("Issue warning", "Let the driver go with words of advice.")); TrafficStopMenu.AddItem(OutOfVehicleItem = new UIMenuListItem("Order out of vehicle", "", OccupantSelector)); TrafficStopMenu.RefreshIndex(); TrafficStopMenu.OnItemSelect += OnItemSelect; TrafficStopMenu.MouseControlsEnabled = false; TrafficStopMenu.AllowCameraMovement = true; for (int i = 5; i <= Offence.maxFine; i += 5) { FineList.Add(Offence.currency + i.ToString()); } for (int i = Offence.minpoints; i <= Offence.maxpoints; i += Offence.pointincstep) { PointsList.Add(i.ToString()); } TicketMenu.AddItem(TicketOffenceSelectorItem); TicketMenu.AddItem(FineItem = new UIMenuListItem("Fine", "", FineList)); PointsItem = new UIMenuListItem("Points", "", PointsList); if (Offence.enablePoints) { TicketMenu.AddItem(PointsItem); } //TicketMenu.AddItem(TicketReasonsListItem = new UIMenuListItem("Offence", TicketReasonsList, 0)); TicketMenu.AddItem(SeizeVehicleTicketCheckboxItem = new UIMenuCheckboxItem("Seize Vehicle", false)); List <dynamic> PenaltyOptions = new List <dynamic>() { "Ticket", "Court Summons" }; if (LSPDFRPlusHandler.BritishPolicingScriptRunning) { PenaltyOptions = new List <dynamic> { "Traffic Offence Report", "Fixed Penalty Notice", "Court Summons" }; } TicketMenu.AddItem(IssueTicketItem = new UIMenuListItem("~h~Issue ", "", PenaltyOptions)); IssueTicketItem.OnListChanged += OnIndexChange; TicketMenu.ParentMenu = TrafficStopMenu; TicketMenu.RefreshIndex(); TicketMenu.OnItemSelect += OnItemSelect; TicketMenu.MouseControlsEnabled = false; TicketMenu.AllowCameraMovement = true; TicketMenu.SetMenuWidthOffset(80); QuestioningMenu = new UIMenu("Questioning", ""); _MenuPool.Add(QuestioningMenu); QuestioningMenu.AddItem(IllegalInVehQuestionItem = new UIMenuItem("")); QuestioningMenu.AddItem(DrinkingQuestionItem = new UIMenuItem("")); QuestioningMenu.AddItem(DrugsQuestionItem = new UIMenuItem("")); QuestioningMenu.AddItem(SearchPermissionItem = new UIMenuItem("")); QuestioningMenu.ParentMenu = TrafficStopMenu; QuestioningMenu.RefreshIndex(); QuestioningMenu.OnItemSelect += OnItemSelect; QuestioningMenu.MouseControlsEnabled = false; QuestioningMenu.AllowCameraMovement = true; QuestioningMenu.SetMenuWidthOffset(110); CourtsMenu = new TabView("~b~~h~San Andreas Court"); CourtsMenu.AddTab(PendingResultsList = new TabSubmenuItem("Pending Results", EmptyItems)); CourtsMenu.AddTab(PublishedResultsList = new TabSubmenuItem("Results", EmptyItems)); CourtsMenu.RefreshIndex(); MainLogic(); }