mirror of
https://github.com/iTracerFacer/DCS_MissionDev.git
synced 2025-12-03 04:14:46 +00:00
136 lines
4.6 KiB
Lua
136 lines
4.6 KiB
Lua
--[[
|
|
Unified F10 Menu Manager
|
|
|
|
Purpose: Provides a centralized menu system to organize all mission scripts
|
|
into a consistent F10 menu structure.
|
|
|
|
Menu Organization:
|
|
F10 -> F1: Mission Options (all other scripts go here)
|
|
F10 -> F2: CTLD (reserved position)
|
|
F10 -> F3: AFAC Control (reserved position)
|
|
|
|
Usage:
|
|
1. Load this script FIRST before any other menu-creating scripts
|
|
2. Other scripts should use MenuManager to register their menus
|
|
|
|
Example:
|
|
-- In your script, instead of:
|
|
-- local MyMenu = MENU_COALITION:New(coalition.side.BLUE, "My Script")
|
|
|
|
-- Use:
|
|
-- local MyMenu = MenuManager.CreateCoalitionMenu(coalition.side.BLUE, "My Script")
|
|
|
|
]]--
|
|
|
|
MenuManager = {}
|
|
MenuManager.Version = "1.1"
|
|
|
|
-- Configuration
|
|
MenuManager.Config = {
|
|
EnableMissionOptionsMenu = true, -- Set to false to disable the parent menu system
|
|
MissionOptionsMenuName = "Mission Options", -- Name of the parent menu
|
|
Debug = false -- Set to true for debug messages
|
|
}
|
|
|
|
-- Storage for menu references
|
|
MenuManager.Menus = {
|
|
Blue = {},
|
|
Red = {},
|
|
Mission = {}
|
|
}
|
|
|
|
-- Parent menu references (created on first use)
|
|
MenuManager.ParentMenus = {
|
|
BlueCoalition = nil,
|
|
RedCoalition = nil,
|
|
Mission = nil
|
|
}
|
|
|
|
-- Initialize the parent menus
|
|
function MenuManager.Initialize()
|
|
if MenuManager.Config.EnableMissionOptionsMenu then
|
|
-- Create the parent "Mission Options" menu for each coalition
|
|
MenuManager.ParentMenus.BlueCoalition = MENU_COALITION:New(
|
|
coalition.side.BLUE,
|
|
MenuManager.Config.MissionOptionsMenuName
|
|
)
|
|
|
|
MenuManager.ParentMenus.RedCoalition = MENU_COALITION:New(
|
|
coalition.side.RED,
|
|
MenuManager.Config.MissionOptionsMenuName
|
|
)
|
|
|
|
-- Note: MENU_MISSION not created to avoid duplicate empty menu
|
|
-- Scripts that need mission-wide menus should use MENU_MISSION directly
|
|
|
|
if MenuManager.Config.Debug then
|
|
env.info("MenuManager: Initialized parent coalition menus")
|
|
end
|
|
end
|
|
end
|
|
|
|
-- Create a coalition menu under "Mission Options"
|
|
-- @param coalitionSide: coalition.side.BLUE or coalition.side.RED
|
|
-- @param menuName: Name of the menu
|
|
-- @param parentMenu: (Optional) If provided, creates as submenu of this parent instead of Mission Options
|
|
-- @return: MENU_COALITION object
|
|
function MenuManager.CreateCoalitionMenu(coalitionSide, menuName, parentMenu)
|
|
if MenuManager.Config.EnableMissionOptionsMenu and not parentMenu then
|
|
-- Create under Mission Options
|
|
local parent = (coalitionSide == coalition.side.BLUE)
|
|
and MenuManager.ParentMenus.BlueCoalition
|
|
or MenuManager.ParentMenus.RedCoalition
|
|
|
|
local menu = MENU_COALITION:New(coalitionSide, menuName, parent)
|
|
|
|
if MenuManager.Config.Debug then
|
|
local coalitionName = (coalitionSide == coalition.side.BLUE) and "BLUE" or "RED"
|
|
env.info(string.format("MenuManager: Created coalition menu '%s' for %s", menuName, coalitionName))
|
|
end
|
|
|
|
return menu
|
|
else
|
|
-- Create as root menu or under provided parent
|
|
local menu = MENU_COALITION:New(coalitionSide, menuName, parentMenu)
|
|
return menu
|
|
end
|
|
end
|
|
|
|
-- Create a mission menu (not nested under Mission Options, as that causes duplicates)
|
|
-- @param menuName: Name of the menu
|
|
-- @param parentMenu: (Optional) Parent menu
|
|
-- @return: MENU_MISSION object
|
|
-- Note: Mission menus are visible to all players and cannot be nested under coalition menus
|
|
function MenuManager.CreateMissionMenu(menuName, parentMenu)
|
|
-- Always create as root menu or under provided parent
|
|
-- Mission menus can't be nested under coalition-specific "Mission Options"
|
|
local menu = MENU_MISSION:New(menuName, parentMenu)
|
|
|
|
if MenuManager.Config.Debug then
|
|
env.info(string.format("MenuManager: Created mission menu '%s'", menuName))
|
|
end
|
|
|
|
return menu
|
|
end
|
|
|
|
-- Helper to disable the parent menu system at runtime
|
|
function MenuManager.DisableParentMenus()
|
|
MenuManager.Config.EnableMissionOptionsMenu = false
|
|
env.info("MenuManager: Parent menu system disabled")
|
|
end
|
|
|
|
-- Helper to enable the parent menu system at runtime
|
|
function MenuManager.EnableParentMenus()
|
|
MenuManager.Config.EnableMissionOptionsMenu = true
|
|
if not MenuManager.ParentMenus.BlueCoalition then
|
|
MenuManager.Initialize()
|
|
end
|
|
env.info("MenuManager: Parent menu system enabled")
|
|
end
|
|
|
|
-- Initialize on load
|
|
MenuManager.Initialize()
|
|
|
|
-- Announcement
|
|
env.info(string.format("MenuManager v%s loaded - Mission Options menu system ready", MenuManager.Version))
|