* Initial Methods for SpearheadAPI

* Added Spearhead API

* Added Spearhead API

* fixed compile for api

* Added notes for API in beta

* Added notes for API in beta

* Added Menu to all doc pages

* Added Menu to all doc pages

* added it for real

* added it for real

* fixed develop

* fixed develop

* fixed develop

* wip

* wip

* updated

* work in progress

* work in progress

* added empty docs page

* wip

* removed SAR files from persistence branch

* Added Blue Sams as seperate class

* added initial persistance

* added initial persistance

* added initial persistance

* added initial persistance

* added initial persistance

* added menu to persistence markdown

* added menu to persistence markdown

* added menu to persistence markdown

* docs update

* wip

* wip

* Refactor of Stage classes.

* wip

* wip

* wip

* reworked bluesam and stagebase

* Added waiting stage functionality

* updated docs

* wip

* wip

* wip

* updated

* wip

* wip

* wip

* refactored without issues, needs testing

---------

Co-authored-by: Dutchie <54616262+dutchie032@users.noreply.github.com>
Co-authored-by: dutchie032 <dutchie032>
Co-authored-by: ex61wi <tim.rorije@ing.com>
This commit is contained in:
2025-04-22 14:39:22 +02:00
committed by GitHub
co-authored by Dutchie dutchie032 <dutchie032> ex61wi
parent 9c6a5ed217
commit ff392e0e7e
37 changed files with 4494 additions and 1732 deletions
+74 -57
View File
@@ -1,26 +1,39 @@
local SpearheadEvents = {}
do
---@type Logger
local logger = nil
---@param logLevel LogLevel
SpearheadEvents.Init = function(logLevel)
logger = Spearhead.LoggerTemplate:new("Events", logLevel)
end
local warn = function(text)
if logger then
logger:warn(text)
end
end
local logError = function(text)
if logger then logger:error(text) end
end
local logDebug = function(text)
if logger then logger:debug(text) end
end
---@class OnStageChangedListener
---@field OnStageNumberChanged fun(self:OnStageChangedListener, number:integer)
do -- STAGE NUMBER CHANGED
local OnStageNumberChangedListeners = {}
local OnStageNumberChangedHandlers = {}
local warn = function(text)
env.warn("[Spearhead][Events] " .. (text or "nil"))
end
local error = function(text)
env.error("[Spearhead][Events] " .. (text or "nil"))
end
---Add a stage zone number changed listener
---@param listener table object with function OnStageNumberChanged(self, number)
---@param listener OnStageChangedListener object with function OnStageNumberChanged(self, number)
SpearheadEvents.AddStageNumberChangedListener = function(listener)
if type(listener) ~= "table" then
warn("Event listener not of type table, did you mean to use handler?")
return
end
table.insert(OnStageNumberChangedListeners, listener)
end
@@ -36,21 +49,27 @@ do
---@param newStageNumber number
SpearheadEvents.PublishStageNumberChanged = function(newStageNumber)
pcall(function ()
Spearhead.classes.persistence.Persistence.SetActiveStage(newStageNumber)
end)
for _, callable in pairs(OnStageNumberChangedListeners) do
local succ, err = pcall(function()
callable:OnStageNumberChanged(newStageNumber)
end)
if err then
error(err)
logError(err)
end
end
for _, callable in pairs(OnStageNumberChangedHandlers) do
local succ, err = pcall(callable, newStageNumber)
if err then
error(err)
logError(err)
end
end
Spearhead.StageNumber = newStageNumber
end
end
@@ -72,11 +91,15 @@ do
table.insert(onLandEventListeners[unitName], landListener)
end
---@class OnUnitLostListener
---@field OnUnitLost fun(self:OnUnitLostListener, unit:table)
---@type table<string,Array<OnUnitLostListener>>
local OnUnitLostListeners = {}
---This listener gets fired for any event that can indicate a loss of a unit.
---Such as: Eject, Crash, Dead, Unit_Lost,
---@param unitName any
---@param unitLostListener table Object with function: OnUnitLost(initiatorUnit)
---@param unitLostListener OnUnitLostListener
SpearheadEvents.addOnUnitLostEventListener = function(unitName, unitLostListener)
if type(unitLostListener) ~= "table" then
warn("Unit lost Event listener not of type table/object")
@@ -119,7 +142,7 @@ do
callable:OnGroupRTB(groupName)
end)
if err then
error(err)
logError(err)
end
end
end
@@ -154,7 +177,7 @@ do
callable:OnGroupRTBInTen(groupName)
end)
if err then
error(err)
logError(err)
end
end
end
@@ -190,7 +213,7 @@ do
callable:OnGroupOnStation(groupName)
end)
if err then
error(err)
logError(err)
end
end
end
@@ -198,39 +221,6 @@ do
end
end
do --COMMANDS
do -- status updates
local onStatusRequestReceivedListeners = {}
---comment
---@param listener table object with OnStatusRequestReceived(self, groupId)
SpearheadEvents.AddOnStatusRequestReceivedListener = function(listener)
if type(listener) ~= "table" then
warn("Unit lost Event listener not of type table/object")
return
end
table.insert(onStatusRequestReceivedListeners, listener)
end
local triggerStatusRequestReceived = function(groupId)
for _, callable in pairs(onStatusRequestReceivedListeners) do
local succ, err = pcall(function()
callable:OnStatusRequestReceived(groupId)
end)
end
end
SpearheadEvents.AddCommandsToGroup = function(groupId)
local base = "MISSIONS"
if groupId then
missionCommands.addCommandForGroup(groupId, "Stage Status", nil, triggerStatusRequestReceived,
groupId)
end
end
end
end
do -- PLAYER ENTER UNIT
local playerEnterUnitListeners = {}
---comment
@@ -252,7 +242,7 @@ do
callable:OnPlayerEntersUnit(unit)
end)
if err then
error(err)
logError(err)
end
end
end
@@ -260,6 +250,20 @@ do
end
end
do -- Ejection events
local unitEjectListeners = {}
SpearheadEvents.AddOnUnitEjectedListener = function(listener)
if type(listener) ~= "table" then
warn("Unit lost Event listener not of type table/object")
return
end
table.insert(unitEjectListeners, listener)
end
end
local e = {}
function e:onEvent(event)
if event.id == world.event.S_EVENT_LAND or event.id == world.event.S_EVENT_RUNWAY_TOUCH then
@@ -273,7 +277,7 @@ do
callable:OnUnitLanded(unit, airbase)
end)
if err then
error(err)
logError(err)
end
end
end
@@ -285,6 +289,11 @@ do
event.id == world.event.S_EVENT_EJECTION or
event.id == world.event.S_EVENT_UNIT_LOST then
local object = event.initiator
if object and object.getName then
logDebug("Receiving death event from: " .. object:getName())
end
if object and object.getName and OnUnitLostListeners[object:getName()] then
for _, callable in pairs(OnUnitLostListeners[object:getName()]) do
local succ, err = pcall(function()
@@ -292,12 +301,20 @@ do
end)
if err then
error(err)
logError(err)
end
end
end
end
if event.id == world.event.S_EVENT_EJECTION then
end
if event.id == world.event.S_EVENT_MISSION_END then
Spearhead.classes.persistence.Persistence.UpdateNow()
end
local AI_GROUPS = {}
local function CheckAndTriggerSpawnAsync(unit, time)