124 lines
5.6 KiB
Lua
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

-- ====================================================================================
-- TUM.INTERMISSION - HANDLES THE MENU DISPLAYED BETWEEN MISSIONS
-- ====================================================================================
-- TUM.intermission.createMenu()
-- TUM.intermission.onInitialize()
-- ====================================================================================
TUM.intermission = {}
do
local missionZonesMarkers = {}
local function setSetting(args)
if not args.id or not args.value then return end
TUM.settings.setValue(args.id, args.value, false)
TUM.intermission.createMenu()
end
local function createSubMenu(id, parentMenu)
local rootMenu = nil
rootMenu = missionCommands.addSubMenu(TUM.settings.getSettingsName(id)..": "..TUM.settings.getValue(id, true), parentMenu)
for i,v in ipairs(TUM.settings.getPossibleValues(id)) do
local commandText = v
if id == TUM.settings.id.TARGET_LOCATION then
local playerCenter = DCSEx.world.getUnitsCenter(DCSEx.world.getAllPlayers())
local distance = math.floor(DCSEx.converter.metersToNM(DCSEx.math.getDistance2D(playerCenter, DCSEx.zones.getByName(v))))
commandText = commandText.."(≈"..tostring(distance).." nm)"
end
missionCommands.addCommand(commandText, rootMenu, setSetting, { id = id, value = i, redrawMenu = true })
end
end
function TUM.intermission.createMissionZonesMarkers()
TUM.intermission.removeMissionZonesMarkers()
local missionZones = TUM.territories.getMissionZones()
for _,z in ipairs(missionZones) do
local zoneOwner = TUM.territories.getPointOwner(z)
local color = DCSEx.dcs.getCoalitionColor(zoneOwner)
local ids = DCSEx.zones.drawOnMap(z, { color[1], color[2], color[3], 1 }, { color[1], color[2], color[3], .5 }, DCSEx.enums.lineType.SOLID, true, true)
if ids then
table.insert(missionZonesMarkers, ids[1])
table.insert(missionZonesMarkers, ids[2])
end
end
end
function TUM.intermission.doCommandStartMission(allowEvenInAir)
allowEvenInAir = allowEvenInAir or false
local players = DCSEx.world.getAllPlayers()
if #players == 0 then
trigger.action.outText("No player slots occupied. At least one client slot must be occupied by a player to start the mission.", 5)
trigger.action.outSound("UI-Error.ogg")
return
end
if not allowEvenInAir and not TUM.settings.getValue(TUM.settings.id.MULTIPLAYER) then
for _,p in ipairs(players) do
if p:inAir() then
trigger.action.outText("Cannot start a single player mission while the player is in the air. Please land before starting the mission.", 5)
trigger.action.outSound("UI-Error.ogg")
return
end
end
end
trigger.action.outText("Generating mission and loading assets, this can take some time...", 5)
-- Add a little delay for the "Generating mission..." message be printed out. Once generation begins, the main DCS thread will be to busy to output anything.
timer.scheduleFunction(TUM.mission.beginMission, false, timer.getTime() + 1)
end
function TUM.intermission.removeMissionZonesMarkers()
for _,id in ipairs(missionZonesMarkers) do
trigger.action.removeMark(id)
end
missionZonesMarkers = {}
end
-------------------------------------
-- Creates the mission briefing menu
-------------------------------------
function TUM.intermission.createMenu()
local rootMenu = TUM.getOrCreateRootMenu(true) -- Clear the menu
local briefingText = "Welcome to The Universal Mission for DCS World, a highly customizable mission available for single-player and PvE.\n\nOpen the communication menu and select the ''F10. Other'' option to access mission settings."
DCSEx.envMission.setBriefing(coalition.side.RED, briefingText)
DCSEx.envMission.setBriefing(coalition.side.BLUE, briefingText)
TUM.intermission.createMissionZonesMarkers() -- Show the available mission zones on the F10 map
missionCommands.addCommand(" Display mission settings", rootMenu, TUM.settings.printSettingsSummary, false)
local settingsMenu = missionCommands.addSubMenu("✎ Change mission settings", rootMenu)
createSubMenu(TUM.settings.id.COALITION_BLUE, settingsMenu)
createSubMenu(TUM.settings.id.COALITION_RED, settingsMenu)
createSubMenu(TUM.settings.id.TASKING, settingsMenu)
createSubMenu(TUM.settings.id.TARGET_LOCATION, settingsMenu)
createSubMenu(TUM.settings.id.TARGET_COUNT, settingsMenu)
createSubMenu(TUM.settings.id.ENEMY_AIR_DEFENSE, settingsMenu)
createSubMenu(TUM.settings.id.ENEMY_AIR_FORCE, settingsMenu)
createSubMenu(TUM.settings.id.WINGMEN, settingsMenu)
createSubMenu(TUM.settings.id.AI_CAP, settingsMenu)
TUM.playerCareer.createMenu()
missionCommands.addCommand("➤ Begin mission", rootMenu, TUM.intermission.doCommandStartMission, false)
TUM.debugMenu.createMenu() -- Append debug menu to other menus (if debug mode enabled)
end
-------------------------------------
-- Called on mission start up
-- @return True if started up properly, false if an error happened
-------------------------------------
function TUM.intermission.onStartUp()
TUM.intermission.createMenu() -- Create the briefing menu
return true
end
end