mirror of
https://github.com/dcs-retribution/dcs-retribution.git
synced 2025-11-10 15:41:24 +00:00
Factor out Lua generation.
This commit is contained in:
parent
200c13dc31
commit
851c2d88a9
@ -320,157 +320,7 @@ class Operation:
|
|||||||
if self.game.settings.perf_smoke_gen:
|
if self.game.settings.perf_smoke_gen:
|
||||||
visualgen.generate()
|
visualgen.generate()
|
||||||
|
|
||||||
luaData = {}
|
self.generate_lua(airgen, airsupportgen, jtacs)
|
||||||
luaData["AircraftCarriers"] = {}
|
|
||||||
luaData["Tankers"] = {}
|
|
||||||
luaData["AWACs"] = {}
|
|
||||||
luaData["JTACs"] = {}
|
|
||||||
luaData["TargetPoints"] = {}
|
|
||||||
|
|
||||||
self.assign_channels_to_flights(airgen.flights,
|
|
||||||
airsupportgen.air_support)
|
|
||||||
|
|
||||||
for tanker in airsupportgen.air_support.tankers:
|
|
||||||
luaData["Tankers"][tanker.callsign] = {
|
|
||||||
"dcsGroupName": tanker.dcsGroupName,
|
|
||||||
"callsign": tanker.callsign,
|
|
||||||
"variant": tanker.variant,
|
|
||||||
"radio": tanker.freq.mhz,
|
|
||||||
"tacan": str(tanker.tacan.number) + tanker.tacan.band.name
|
|
||||||
}
|
|
||||||
|
|
||||||
if self.is_awacs_enabled:
|
|
||||||
for awacs in airsupportgen.air_support.awacs:
|
|
||||||
luaData["AWACs"][awacs.callsign] = {
|
|
||||||
"dcsGroupName": awacs.dcsGroupName,
|
|
||||||
"callsign": awacs.callsign,
|
|
||||||
"radio": awacs.freq.mhz
|
|
||||||
}
|
|
||||||
|
|
||||||
for jtac in jtacs:
|
|
||||||
luaData["JTACs"][jtac.callsign] = {
|
|
||||||
"dcsGroupName": jtac.dcsGroupName,
|
|
||||||
"callsign": jtac.callsign,
|
|
||||||
"zone": jtac.region,
|
|
||||||
"dcsUnit": jtac.unit_name,
|
|
||||||
"laserCode": jtac.code
|
|
||||||
}
|
|
||||||
|
|
||||||
for flight in airgen.flights:
|
|
||||||
if flight.friendly and flight.flight_type in [FlightType.ANTISHIP, FlightType.DEAD, FlightType.SEAD, FlightType.STRIKE]:
|
|
||||||
flightType = flight.flight_type.name
|
|
||||||
flightTarget = flight.package.target
|
|
||||||
if flightTarget:
|
|
||||||
flightTargetName = None
|
|
||||||
flightTargetType = None
|
|
||||||
if hasattr(flightTarget, 'obj_name'):
|
|
||||||
flightTargetName = flightTarget.obj_name
|
|
||||||
flightTargetType = flightType + f" TGT ({flightTarget.category})"
|
|
||||||
elif hasattr(flightTarget, 'name'):
|
|
||||||
flightTargetName = flightTarget.name
|
|
||||||
flightTargetType = flightType + " TGT (Airbase)"
|
|
||||||
luaData["TargetPoints"][flightTargetName] = {
|
|
||||||
"name": flightTargetName,
|
|
||||||
"type": flightTargetType,
|
|
||||||
"position": { "x": flightTarget.position.x, "y": flightTarget.position.y}
|
|
||||||
}
|
|
||||||
|
|
||||||
# set a LUA table with data from Liberation that we want to set
|
|
||||||
# at the moment it contains Liberation's install path, and an overridable definition for the JTACAutoLase function
|
|
||||||
# later, we'll add data about the units and points having been generated, in order to facilitate the configuration of the plugin lua scripts
|
|
||||||
state_location = "[[" + os.path.abspath(".") + "]]"
|
|
||||||
lua = """
|
|
||||||
-- setting configuration table
|
|
||||||
env.info("DCSLiberation|: setting configuration table")
|
|
||||||
|
|
||||||
-- all data in this table is overridable.
|
|
||||||
dcsLiberation = {}
|
|
||||||
|
|
||||||
-- the base location for state.json; if non-existent, it'll be replaced with LIBERATION_EXPORT_DIR, TEMP, or DCS working directory
|
|
||||||
dcsLiberation.installPath=""" + state_location + """
|
|
||||||
|
|
||||||
"""
|
|
||||||
# Process the tankers
|
|
||||||
lua += """
|
|
||||||
|
|
||||||
-- list the tankers generated by Liberation
|
|
||||||
dcsLiberation.Tankers = {
|
|
||||||
"""
|
|
||||||
for key in luaData["Tankers"]:
|
|
||||||
data = luaData["Tankers"][key]
|
|
||||||
dcsGroupName= data["dcsGroupName"]
|
|
||||||
callsign = data["callsign"]
|
|
||||||
variant = data["variant"]
|
|
||||||
tacan = data["tacan"]
|
|
||||||
radio = data["radio"]
|
|
||||||
lua += f" {{dcsGroupName='{dcsGroupName}', callsign='{callsign}', variant='{variant}', tacan='{tacan}', radio='{radio}' }}, \n"
|
|
||||||
#lua += f" {{name='{dcsGroupName}', description='{callsign} ({variant})', information='Tacan:{tacan} Radio:{radio}' }}, \n"
|
|
||||||
lua += "}"
|
|
||||||
|
|
||||||
# Process the AWACSes
|
|
||||||
lua += """
|
|
||||||
|
|
||||||
-- list the AWACs generated by Liberation
|
|
||||||
dcsLiberation.AWACs = {
|
|
||||||
"""
|
|
||||||
for key in luaData["AWACs"]:
|
|
||||||
data = luaData["AWACs"][key]
|
|
||||||
dcsGroupName= data["dcsGroupName"]
|
|
||||||
callsign = data["callsign"]
|
|
||||||
radio = data["radio"]
|
|
||||||
lua += f" {{dcsGroupName='{dcsGroupName}', callsign='{callsign}', radio='{radio}' }}, \n"
|
|
||||||
#lua += f" {{name='{dcsGroupName}', description='{callsign} (AWACS)', information='Radio:{radio}' }}, \n"
|
|
||||||
lua += "}"
|
|
||||||
|
|
||||||
# Process the JTACs
|
|
||||||
lua += """
|
|
||||||
|
|
||||||
-- list the JTACs generated by Liberation
|
|
||||||
dcsLiberation.JTACs = {
|
|
||||||
"""
|
|
||||||
for key in luaData["JTACs"]:
|
|
||||||
data = luaData["JTACs"][key]
|
|
||||||
dcsGroupName= data["dcsGroupName"]
|
|
||||||
callsign = data["callsign"]
|
|
||||||
zone = data["zone"]
|
|
||||||
laserCode = data["laserCode"]
|
|
||||||
dcsUnit = data["dcsUnit"]
|
|
||||||
lua += f" {{dcsGroupName='{dcsGroupName}', callsign='{callsign}', zone='{zone}', laserCode='{laserCode}', dcsUnit='{dcsUnit}' }}, \n"
|
|
||||||
#lua += f" {{name='{dcsGroupName}', description='JTAC {callsign} ', information='Laser:{laserCode}', jtac={laserCode} }}, \n"
|
|
||||||
lua += "}"
|
|
||||||
|
|
||||||
# Process the Target Points
|
|
||||||
lua += """
|
|
||||||
|
|
||||||
-- list the target points generated by Liberation
|
|
||||||
dcsLiberation.TargetPoints = {
|
|
||||||
"""
|
|
||||||
for key in luaData["TargetPoints"]:
|
|
||||||
data = luaData["TargetPoints"][key]
|
|
||||||
name = data["name"]
|
|
||||||
pointType = data["type"]
|
|
||||||
positionX = data["position"]["x"]
|
|
||||||
positionY = data["position"]["y"]
|
|
||||||
lua += f" {{name='{name}', pointType='{pointType}', positionX='{positionX}', positionY='{positionY}' }}, \n"
|
|
||||||
#lua += f" {{name='{pointType} {name}', point{{x={positionX}, z={positionY} }} }}, \n"
|
|
||||||
lua += "}"
|
|
||||||
|
|
||||||
lua += """
|
|
||||||
|
|
||||||
-- list the airbases generated by Liberation
|
|
||||||
-- dcsLiberation.Airbases = {}
|
|
||||||
|
|
||||||
-- list the aircraft carriers generated by Liberation
|
|
||||||
-- dcsLiberation.Carriers = {}
|
|
||||||
|
|
||||||
-- later, we'll add more data to the table
|
|
||||||
|
|
||||||
"""
|
|
||||||
|
|
||||||
|
|
||||||
trigger = TriggerStart(comment="Set DCS Liberation data")
|
|
||||||
trigger.add_action(DoScript(String(lua)))
|
|
||||||
self.current_mission.triggerrules.triggers.append(trigger)
|
|
||||||
|
|
||||||
# Inject Plugins Lua Scripts and data
|
# Inject Plugins Lua Scripts and data
|
||||||
for plugin in LuaPluginManager.plugins():
|
for plugin in LuaPluginManager.plugins():
|
||||||
@ -505,3 +355,161 @@ dcsLiberation.TargetPoints = {
|
|||||||
aircraft_data.channel_allocator.assign_channels_for_flight(
|
aircraft_data.channel_allocator.assign_channels_for_flight(
|
||||||
flight, air_support
|
flight, air_support
|
||||||
)
|
)
|
||||||
|
|
||||||
|
def generate_lua(self, airgen: AircraftConflictGenerator,
|
||||||
|
airsupportgen: AirSupportConflictGenerator,
|
||||||
|
jtacs: List[JtacInfo]) -> None:
|
||||||
|
luaData = {}
|
||||||
|
luaData["AircraftCarriers"] = {}
|
||||||
|
luaData["Tankers"] = {}
|
||||||
|
luaData["AWACs"] = {}
|
||||||
|
luaData["JTACs"] = {}
|
||||||
|
luaData["TargetPoints"] = {}
|
||||||
|
|
||||||
|
self.assign_channels_to_flights(airgen.flights,
|
||||||
|
airsupportgen.air_support)
|
||||||
|
|
||||||
|
for tanker in airsupportgen.air_support.tankers:
|
||||||
|
luaData["Tankers"][tanker.callsign] = {
|
||||||
|
"dcsGroupName": tanker.dcsGroupName,
|
||||||
|
"callsign": tanker.callsign,
|
||||||
|
"variant": tanker.variant,
|
||||||
|
"radio": tanker.freq.mhz,
|
||||||
|
"tacan": str(tanker.tacan.number) + tanker.tacan.band.name
|
||||||
|
}
|
||||||
|
|
||||||
|
if self.is_awacs_enabled:
|
||||||
|
for awacs in airsupportgen.air_support.awacs:
|
||||||
|
luaData["AWACs"][awacs.callsign] = {
|
||||||
|
"dcsGroupName": awacs.dcsGroupName,
|
||||||
|
"callsign": awacs.callsign,
|
||||||
|
"radio": awacs.freq.mhz
|
||||||
|
}
|
||||||
|
|
||||||
|
for jtac in jtacs:
|
||||||
|
luaData["JTACs"][jtac.callsign] = {
|
||||||
|
"dcsGroupName": jtac.dcsGroupName,
|
||||||
|
"callsign": jtac.callsign,
|
||||||
|
"zone": jtac.region,
|
||||||
|
"dcsUnit": jtac.unit_name,
|
||||||
|
"laserCode": jtac.code
|
||||||
|
}
|
||||||
|
|
||||||
|
for flight in airgen.flights:
|
||||||
|
if flight.friendly and flight.flight_type in [FlightType.ANTISHIP,
|
||||||
|
FlightType.DEAD,
|
||||||
|
FlightType.SEAD,
|
||||||
|
FlightType.STRIKE]:
|
||||||
|
flightType = flight.flight_type.name
|
||||||
|
flightTarget = flight.package.target
|
||||||
|
if flightTarget:
|
||||||
|
flightTargetName = None
|
||||||
|
flightTargetType = None
|
||||||
|
if hasattr(flightTarget, 'obj_name'):
|
||||||
|
flightTargetName = flightTarget.obj_name
|
||||||
|
flightTargetType = flightType + f" TGT ({flightTarget.category})"
|
||||||
|
elif hasattr(flightTarget, 'name'):
|
||||||
|
flightTargetName = flightTarget.name
|
||||||
|
flightTargetType = flightType + " TGT (Airbase)"
|
||||||
|
luaData["TargetPoints"][flightTargetName] = {
|
||||||
|
"name": flightTargetName,
|
||||||
|
"type": flightTargetType,
|
||||||
|
"position": {"x": flightTarget.position.x,
|
||||||
|
"y": flightTarget.position.y}
|
||||||
|
}
|
||||||
|
|
||||||
|
# set a LUA table with data from Liberation that we want to set
|
||||||
|
# at the moment it contains Liberation's install path, and an overridable definition for the JTACAutoLase function
|
||||||
|
# later, we'll add data about the units and points having been generated, in order to facilitate the configuration of the plugin lua scripts
|
||||||
|
state_location = "[[" + os.path.abspath(".") + "]]"
|
||||||
|
lua = """
|
||||||
|
-- setting configuration table
|
||||||
|
env.info("DCSLiberation|: setting configuration table")
|
||||||
|
|
||||||
|
-- all data in this table is overridable.
|
||||||
|
dcsLiberation = {}
|
||||||
|
|
||||||
|
-- the base location for state.json; if non-existent, it'll be replaced with LIBERATION_EXPORT_DIR, TEMP, or DCS working directory
|
||||||
|
dcsLiberation.installPath=""" + state_location + """
|
||||||
|
|
||||||
|
"""
|
||||||
|
# Process the tankers
|
||||||
|
lua += """
|
||||||
|
|
||||||
|
-- list the tankers generated by Liberation
|
||||||
|
dcsLiberation.Tankers = {
|
||||||
|
"""
|
||||||
|
for key in luaData["Tankers"]:
|
||||||
|
data = luaData["Tankers"][key]
|
||||||
|
dcsGroupName = data["dcsGroupName"]
|
||||||
|
callsign = data["callsign"]
|
||||||
|
variant = data["variant"]
|
||||||
|
tacan = data["tacan"]
|
||||||
|
radio = data["radio"]
|
||||||
|
lua += f" {{dcsGroupName='{dcsGroupName}', callsign='{callsign}', variant='{variant}', tacan='{tacan}', radio='{radio}' }}, \n"
|
||||||
|
# lua += f" {{name='{dcsGroupName}', description='{callsign} ({variant})', information='Tacan:{tacan} Radio:{radio}' }}, \n"
|
||||||
|
lua += "}"
|
||||||
|
|
||||||
|
# Process the AWACSes
|
||||||
|
lua += """
|
||||||
|
|
||||||
|
-- list the AWACs generated by Liberation
|
||||||
|
dcsLiberation.AWACs = {
|
||||||
|
"""
|
||||||
|
for key in luaData["AWACs"]:
|
||||||
|
data = luaData["AWACs"][key]
|
||||||
|
dcsGroupName = data["dcsGroupName"]
|
||||||
|
callsign = data["callsign"]
|
||||||
|
radio = data["radio"]
|
||||||
|
lua += f" {{dcsGroupName='{dcsGroupName}', callsign='{callsign}', radio='{radio}' }}, \n"
|
||||||
|
# lua += f" {{name='{dcsGroupName}', description='{callsign} (AWACS)', information='Radio:{radio}' }}, \n"
|
||||||
|
lua += "}"
|
||||||
|
|
||||||
|
# Process the JTACs
|
||||||
|
lua += """
|
||||||
|
|
||||||
|
-- list the JTACs generated by Liberation
|
||||||
|
dcsLiberation.JTACs = {
|
||||||
|
"""
|
||||||
|
for key in luaData["JTACs"]:
|
||||||
|
data = luaData["JTACs"][key]
|
||||||
|
dcsGroupName = data["dcsGroupName"]
|
||||||
|
callsign = data["callsign"]
|
||||||
|
zone = data["zone"]
|
||||||
|
laserCode = data["laserCode"]
|
||||||
|
dcsUnit = data["dcsUnit"]
|
||||||
|
lua += f" {{dcsGroupName='{dcsGroupName}', callsign='{callsign}', zone='{zone}', laserCode='{laserCode}', dcsUnit='{dcsUnit}' }}, \n"
|
||||||
|
# lua += f" {{name='{dcsGroupName}', description='JTAC {callsign} ', information='Laser:{laserCode}', jtac={laserCode} }}, \n"
|
||||||
|
lua += "}"
|
||||||
|
|
||||||
|
# Process the Target Points
|
||||||
|
lua += """
|
||||||
|
|
||||||
|
-- list the target points generated by Liberation
|
||||||
|
dcsLiberation.TargetPoints = {
|
||||||
|
"""
|
||||||
|
for key in luaData["TargetPoints"]:
|
||||||
|
data = luaData["TargetPoints"][key]
|
||||||
|
name = data["name"]
|
||||||
|
pointType = data["type"]
|
||||||
|
positionX = data["position"]["x"]
|
||||||
|
positionY = data["position"]["y"]
|
||||||
|
lua += f" {{name='{name}', pointType='{pointType}', positionX='{positionX}', positionY='{positionY}' }}, \n"
|
||||||
|
# lua += f" {{name='{pointType} {name}', point{{x={positionX}, z={positionY} }} }}, \n"
|
||||||
|
lua += "}"
|
||||||
|
|
||||||
|
lua += """
|
||||||
|
|
||||||
|
-- list the airbases generated by Liberation
|
||||||
|
-- dcsLiberation.Airbases = {}
|
||||||
|
|
||||||
|
-- list the aircraft carriers generated by Liberation
|
||||||
|
-- dcsLiberation.Carriers = {}
|
||||||
|
|
||||||
|
-- later, we'll add more data to the table
|
||||||
|
|
||||||
|
"""
|
||||||
|
|
||||||
|
trigger = TriggerStart(comment="Set DCS Liberation data")
|
||||||
|
trigger.add_action(DoScript(String(lua)))
|
||||||
|
self.current_mission.triggerrules.triggers.append(trigger)
|
||||||
Loading…
x
Reference in New Issue
Block a user