dcs-retribution/plugin/veaf_plugin.py
David Pierron d22943d755 added a customizable plugin system
- the base LUA functionality has been implemented as a mandatory plugin
- the jtacautolase functionality has been implemented as a plugin
- added a VEAF framework plugin

The plugins have GUI elements in the Settings window.
2020-10-12 17:27:13 +02:00

91 lines
5.1 KiB
Python

from PySide2.QtCore import QSize, Qt, QItemSelectionModel, QPoint
from PySide2.QtWidgets import QLabel, QDialog, QGridLayout, QListView, QStackedLayout, QComboBox, QWidget, \
QAbstractItemView, QPushButton, QGroupBox, QCheckBox, QVBoxLayout, QSpinBox
from .base_plugin import BasePlugin
class VeafPlugin(BasePlugin):
nameInUI:str = "VEAF framework"
nameInSettings:str = "plugin.veaf"
enabledDefaultValue:bool = False
#Allow spawn option
nameInUI_allowSpawn:str = "Allow units spawn via markers and CTLD (not implemented yet)"
nameInSettings_allowSpawn:str = "plugin.veaf.allowSpawn"
def setupUI(self, settingsWindow, row:int):
# call the base method to add the plugin selection checkbox
super().setupUI(settingsWindow, row)
if settingsWindow.pluginsOptionsPageLayout:
self.optionsGroup = QGroupBox(self.nameInUI)
optionsGroupLayout = QGridLayout();
optionsGroupLayout.setAlignment(Qt.AlignTop)
self.optionsGroup.setLayout(optionsGroupLayout)
settingsWindow.pluginsOptionsPageLayout.addWidget(self.optionsGroup)
# allow spawn of objects
if not self.nameInSettings_allowSpawn in self.settings.plugins:
self.settings.plugins[self.nameInSettings_allowSpawn] = True
self.uiWidget_allowSpawn = QCheckBox()
self.uiWidget_allowSpawn.setChecked(self.settings.plugins[self.nameInSettings_allowSpawn])
self.uiWidget_allowSpawn.setEnabled(False)
self.uiWidget_allowSpawn.toggled.connect(lambda: self.applySetting(settingsWindow))
optionsGroupLayout.addWidget(QLabel(self.nameInUI_allowSpawn), 0, 0)
optionsGroupLayout.addWidget(self.uiWidget_allowSpawn, 0, 1, Qt.AlignRight)
# disable or enable the UI in the plugins special page
self.enableOptionsGroup()
def enableOptionsGroup(self):
pluginEnabled = self.uiWidget.isChecked()
self.optionsGroup.setEnabled(pluginEnabled)
def applySetting(self, settingsWindow):
# call the base method to apply the plugin selection checkbox value
super().applySetting(settingsWindow)
# save the "allow spawn" option
self.settings.plugins[self.nameInSettings_allowSpawn] = self.uiWidget_allowSpawn.isChecked()
# disable or enable the UI in the plugins special page
self.enableOptionsGroup()
def injectScripts(self, operation):
if super().injectScripts(operation):
# bypass JTACAutoLase
operation.bypassPluginScript("veaf", "jtacautolase")
# inject the required scripts
operation.injectPluginScript("veaf", "src\\scripts\\mist.lua", "mist")
operation.injectPluginScript("veaf", "src\\scripts\\Moose.lua", "moose")
operation.injectPluginScript("veaf", "src\\scripts\\CTLD.lua", "ctld")
operation.injectPluginScript("veaf", "src\\scripts\\NIOD.lua", "niod")
operation.injectPluginScript("veaf", "src\\scripts\\WeatherMark.lua", "weathermark")
operation.injectPluginScript("veaf", "src\\scripts\\veaf.lua", "veaf")
operation.injectPluginScript("veaf", "src\\scripts\\dcsUnits.lua", "dcsunits")
operation.injectPluginScript("veaf", "src\\scripts\\veafAssets.lua", "veafassets")
operation.injectPluginScript("veaf", "src\\scripts\\veafCarrierOperations.lua", "veafcarrieroperations")
operation.injectPluginScript("veaf", "src\\scripts\\veafCasMission.lua", "veafcasmission")
operation.injectPluginScript("veaf", "src\\scripts\\veafCombatMission.lua", "veafcombatmission")
operation.injectPluginScript("veaf", "src\\scripts\\veafCombatZone.lua", "veafcombatzone")
operation.injectPluginScript("veaf", "src\\scripts\\veafGrass.lua", "veafgrass")
operation.injectPluginScript("veaf", "src\\scripts\\veafInterpreter.lua", "veafinterpreter")
operation.injectPluginScript("veaf", "src\\scripts\\veafMarkers.lua", "veafmarkers")
operation.injectPluginScript("veaf", "src\\scripts\\veafMove.lua", "veafmove")
operation.injectPluginScript("veaf", "src\\scripts\\veafNamedPoints.lua", "veafnamedpoints")
operation.injectPluginScript("veaf", "src\\scripts\\veafRadio.lua", "veafradio")
operation.injectPluginScript("veaf", "src\\scripts\\veafRemote.lua", "veafremote")
operation.injectPluginScript("veaf", "src\\scripts\\veafSecurity.lua", "veafsecurity")
operation.injectPluginScript("veaf", "src\\scripts\\veafShortcuts.lua", "veafshortcuts")
operation.injectPluginScript("veaf", "src\\scripts\\veafSpawn.lua", "veafspawn")
operation.injectPluginScript("veaf", "src\\scripts\\veafTransportMission.lua", "veaftransportmission")
operation.injectPluginScript("veaf", "src\\scripts\\veafUnits.lua", "veafunits")
def injectConfiguration(self, operation):
if super().injectConfiguration(operation):
operation.injectPluginScript("veaf", "src\\config\\missionConfig.lua", "missionconfig")