multiple changes

- load plugins when loading a game
- moved plugins scripts to resources/plugins (for pyinstaller)
- removed vanilla JTAC and JTAC_smoke options and settings GUI
- call JtacAutolasePlugin in armor.py
- made a dictionary of INSTALLED_PLUGINS
- removed NIOD from the VEAF plugin
This commit is contained in:
David Pierron 2020-10-12 19:49:39 +02:00
parent 3c4ccd7d57
commit ec6fc076de
21 changed files with 61 additions and 39 deletions

4
.gitignore vendored
View File

@ -21,5 +21,5 @@ logs/
qt_ui/logs/liberation.log
*.psd
plugin/custom/__plugins.lst
plugin/custom/*.lua
resources/plugins/custom/__plugins.lst
resources/plugins/custom/*.lua

3
.gitmodules vendored
View File

@ -5,3 +5,6 @@
[submodule "plugin/veaf"]
path = plugin/veaf
url = https://github.com/VEAF/dcs-liberation-veaf-framework
[submodule "resources/plugins/veaf"]
path = resources/plugins/veaf
url = https://github.com/VEAF/dcs-liberation-veaf-framework

View File

@ -28,6 +28,7 @@ from .event.event import Event, UnitsDeliveryEvent
from .event.frontlineattack import FrontlineAttackEvent
from .infos.information import Information
from .settings import Settings
from plugin import INSTALLED_PLUGINS
COMMISION_UNIT_VARIETY = 4
COMMISION_LIMITS_SCALE = 1.5
@ -218,6 +219,11 @@ class Game:
def on_load(self) -> None:
ObjectiveDistanceCache.set_theater(self.theater)
# set the settings in all plugins
for pluginName in INSTALLED_PLUGINS:
plugin = INSTALLED_PLUGINS[pluginName]
plugin.setSettings(self.settings)
def pass_turn(self, no_action=False):
logging.info("Pass turn")
self.informations.append(Information("End of turn #" + str(self.turn), "-" * 40, 0))

View File

@ -148,7 +148,8 @@ class Operation:
if pluginName == None:
pluginName = "custom"
plugin_path = Path("./plugin",pluginName)
plugin_path = Path("./resources/plugins",pluginName)
logging.debug(f"plugin_path = {plugin_path}")
if scriptFile != None:
scriptFile_path = Path(plugin_path, scriptFile)
@ -468,7 +469,8 @@ dcsLiberation.TargetPoints = {
# Inject Plugins Lua Scripts and data
self.listOfPluginsScripts = []
for plugin in INSTALLED_PLUGINS:
for pluginName in INSTALLED_PLUGINS:
plugin = INSTALLED_PLUGINS[pluginName]
plugin.injectScripts(self)
plugin.injectConfiguration(self)

View File

@ -1,3 +1,4 @@
from plugin import INSTALLED_PLUGINS
class Settings:
@ -24,8 +25,6 @@ class Settings:
self.sams = True # Legacy parameter do not use
self.cold_start = False # Legacy parameter do not use
self.version = None
self.include_jtac_if_available = True
self.jtac_smoke_on = True
# Performance oriented
self.perf_red_alert_state = True
@ -42,5 +41,9 @@ class Settings:
# LUA Plugins system
self.plugins = {}
for pluginName in INSTALLED_PLUGINS:
plugin = INSTALLED_PLUGINS[pluginName]
plugin.setSettings(self)

View File

@ -34,6 +34,7 @@ from gen.ground_forces.ai_ground_planner import (
from .callsigns import callsign_for_support_unit
from .conflictgen import Conflict
from .ground_forces.combat_stance import CombatStance
from plugin import INSTALLED_PLUGINS
SPREAD_DISTANCE_FACTOR = 0.1, 0.3
SPREAD_DISTANCE_SIZE_FACTOR = 0.1
@ -139,7 +140,8 @@ class GroundConflictGenerator:
self.plan_action_for_groups(self.enemy_stance, enemy_groups, player_groups, self.conflict.heading - 90, self.conflict.to_cp, self.conflict.from_cp)
# Add JTAC
if "has_jtac" in self.game.player_faction and self.game.player_faction["has_jtac"] and self.game.settings.include_jtac_if_available:
useJTAC = INSTALLED_PLUGINS and INSTALLED_PLUGINS["JtacAutolasePlugin"] and INSTALLED_PLUGINS["JtacAutolasePlugin"].isEnabled()
if "has_jtac" in self.game.player_faction and self.game.player_faction["has_jtac"] and useJTAC:
n = "JTAC" + str(self.conflict.from_cp.id) + str(self.conflict.to_cp.id)
code = 1688 - len(self.jtacs)

View File

@ -3,8 +3,8 @@ from .veaf_plugin import VeafPlugin
from .jtacautolase_plugin import JtacAutolasePlugin
from .liberation_plugin import LiberationPlugin
INSTALLED_PLUGINS=[
VeafPlugin(),
JtacAutolasePlugin(),
LiberationPlugin()
]
INSTALLED_PLUGINS={
"VeafPlugin": VeafPlugin(),
"JtacAutolasePlugin": JtacAutolasePlugin(),
"LiberationPlugin": LiberationPlugin(),
}

View File

@ -15,16 +15,18 @@ class BasePlugin():
def setupUI(self, settingsWindow, row:int):
self.settings = settingsWindow.game.settings
if not self.nameInSettings in self.settings.plugins:
self.settings.plugins[self.nameInSettings] = self.enabledDefaultValue
self.uiWidget = QCheckBox()
self.uiWidget.setChecked(self.settings.plugins[self.nameInSettings])
self.uiWidget.setChecked(self.isEnabled())
self.uiWidget.toggled.connect(lambda: self.applySetting(settingsWindow))
settingsWindow.pluginsGroupLayout.addWidget(QLabel(self.nameInUI), row, 0)
settingsWindow.pluginsGroupLayout.addWidget(self.uiWidget, row, 1, Qt.AlignRight)
def setSettings(self, settings):
self.settings = settings
if not self.nameInSettings in self.settings.plugins:
self.settings.plugins[self.nameInSettings] = self.enabledDefaultValue
def applySetting(self, settingsWindow):
self.settings.plugins[self.nameInSettings] = self.uiWidget.isChecked()
self.enabled = self.settings.plugins[self.nameInSettings]
@ -38,4 +40,9 @@ class BasePlugin():
return self.isEnabled()
def isEnabled(self) -> bool:
if not self.settings:
return False
self.setSettings(self.settings) # create the necessary settings keys if needed
return self.settings != None and self.settings.plugins[self.nameInSettings]

View File

@ -12,6 +12,7 @@ class JtacAutolasePlugin(BasePlugin):
#Allow spawn option
nameInUI_useSmoke:str = "JTACs use smoke"
nameInSettings_useSmoke:str = "plugin.jtacAutolase.useSmoke"
enabledDefaultValue_useSmoke:bool = True
def setupUI(self, settingsWindow, row:int):
# call the base method to add the plugin selection checkbox
@ -42,6 +43,12 @@ class JtacAutolasePlugin(BasePlugin):
pluginEnabled = self.uiWidget.isChecked()
self.optionsGroup.setEnabled(pluginEnabled)
def setSettings(self, settings):
# call the base method
super().setSettings(settings)
if not self.nameInSettings_useSmoke in self.settings.plugins:
self.settings.plugins[self.nameInSettings_useSmoke] = self.enabledDefaultValue_useSmoke
def applySetting(self, settingsWindow):
# call the base method to apply the plugin selection checkbox value
super().applySetting(settingsWindow)
@ -61,7 +68,7 @@ class JtacAutolasePlugin(BasePlugin):
# add a configuration for JTACAutoLase and start lasing for all JTACs
smoke = "local smoke = false"
if self.settings.plugins[self.nameInSettings_useSmoke]:
if self.isUseSmoke():
smoke = "local smoke = true"
lua = smoke + """
@ -78,3 +85,11 @@ class JtacAutolasePlugin(BasePlugin):
operation.injectLuaTrigger(lua, "Setting and starting JTACs")
def isUseSmoke(self) -> bool:
if not self.settings:
return False
self.setSettings(self.settings) # create the necessary settings keys if needed
return self.settings.plugins[self.nameInSettings_useSmoke]

View File

@ -18,3 +18,6 @@ class LiberationPlugin(BasePlugin):
def injectConfiguration(self, operation):
if super().injectConfiguration(operation):
pass
def isEnabled(self) -> bool:
return True # mandatory plugin

View File

@ -61,7 +61,7 @@ class VeafPlugin(BasePlugin):
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\\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")

View File

@ -183,28 +183,10 @@ class QSettingsWindow(QDialog):
self.generate_marks.setChecked(self.game.settings.generate_marks)
self.generate_marks.toggled.connect(self.applySettings)
if not hasattr(self.game.settings, "include_jtac_if_available"):
self.game.settings.include_jtac_if_available = True
if not hasattr(self.game.settings, "jtac_smoke_on"):
self.game.settings.jtac_smoke_on= True
self.include_jtac_if_available = QCheckBox()
self.include_jtac_if_available.setChecked(self.game.settings.include_jtac_if_available)
self.include_jtac_if_available.toggled.connect(self.applySettings)
self.jtac_smoke_on = QCheckBox()
self.jtac_smoke_on.setChecked(self.game.settings.jtac_smoke_on)
self.jtac_smoke_on.toggled.connect(self.applySettings)
self.gameplayLayout.addWidget(QLabel("Use Supercarrier Module"), 0, 0)
self.gameplayLayout.addWidget(self.supercarrier, 0, 1, Qt.AlignRight)
self.gameplayLayout.addWidget(QLabel("Put Objective Markers on Map"), 1, 0)
self.gameplayLayout.addWidget(self.generate_marks, 1, 1, Qt.AlignRight)
self.gameplayLayout.addWidget(QLabel("Include JTAC (If available)"), 2, 0)
self.gameplayLayout.addWidget(self.include_jtac_if_available, 2, 1, Qt.AlignRight)
self.gameplayLayout.addWidget(QLabel("Enable JTAC smoke markers"), 3, 0)
self.gameplayLayout.addWidget(self.jtac_smoke_on, 3, 1, Qt.AlignRight)
self.performance = QGroupBox("Performance")
self.performanceLayout = QGridLayout()
@ -315,7 +297,8 @@ class QSettingsWindow(QDialog):
self.pluginsGroup.setLayout(self.pluginsGroupLayout)
row:int = 0
for plugin in INSTALLED_PLUGINS:
for pluginName in INSTALLED_PLUGINS:
plugin = INSTALLED_PLUGINS[pluginName]
plugin.setupUI(self, row)
row = row + 1
@ -342,8 +325,6 @@ class QSettingsWindow(QDialog):
self.game.settings.map_coalition_visibility = self.mapVisibiitySelection.currentData()
self.game.settings.external_views_allowed = self.ext_views.isChecked()
self.game.settings.generate_marks = self.generate_marks.isChecked()
self.game.settings.include_jtac_if_available = self.include_jtac_if_available.isChecked()
self.game.settings.jtac_smoke_on = self.jtac_smoke_on.isChecked()
print(self.game.settings.map_coalition_visibility)

BIN
resources/plugins/doc/0.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

BIN
resources/plugins/doc/1.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

BIN
resources/plugins/doc/2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB