Skip to content

Commit

Permalink
Merge pull request #1354 from Courseplay/DisplayesMissingInfoTexts
Browse files Browse the repository at this point in the history
Info texts not defined are now displayed and while entered as a blink…
  • Loading branch information
Tensuko committed Apr 10, 2022
2 parents bc0d52c + d6a8690 commit 06cb15c
Show file tree
Hide file tree
Showing 2 changed files with 60 additions and 22 deletions.
11 changes: 11 additions & 0 deletions scripts/ai/jobs/CpAIJob.lua
Original file line number Diff line number Diff line change
Expand Up @@ -288,7 +288,18 @@ end
function CpAIJob:showNotification(aiMessage)
if not g_Courseplay.globalSettings.infoTextHudActive:getValue() then
CpAIJob:superClass().showNotification(self, aiMessage)
return
end
local hasFinished, releaseMessage, event = CpAIWorker.getMessageData(aiMessage)
local vehicle = self:getVehicle()
if vehicle:getIsEntered() then
--- Makes sure the message is shown, when a player is in the vehicle.
g_currentMission:showBlinkingWarning(string.format(aiMessage:getMessage(), self:getHelperName(), aiMessage:getMessageArguments()), 5000)
elseif releaseMessage == nil then
--- Makes sure message that are not handled by the info texts are shown.
CpAIJob:superClass().showNotification(self, aiMessage)
end

end

--- Automatically repairs the vehicle, depending on the auto repair setting.
Expand Down
71 changes: 49 additions & 22 deletions scripts/specializations/CpAIWorker.lua
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,40 @@ CpAIWorker.NAME = ".cpAIWorker"
CpAIWorker.SPEC_NAME = CpAIWorker.MOD_NAME .. CpAIWorker.NAME
CpAIWorker.KEY = "."..CpAIWorker.MOD_NAME..CpAIWorker.NAME .. "."

--- TODO: this table can probably be moved into the InfoTexts.xml :)
CpAIWorker.messages = {
{
class = AIMessageErrorOutOfFill,
hasFinished = true,
releaseMessage = g_infoTextManager.NEEDS_FILLING,
event = "onCpEmpty"
},
{
class = AIMessageErrorIsFull,
hasFinished = true,
releaseMessage = g_infoTextManager.NEEDS_UNLOADING,
event = "onCpFull"
},
{
class = AIMessageSuccessFinishedJob,
hasFinished = true,
releaseMessage = g_infoTextManager.WORK_FINISHED,
event = "onCpFinished"
},
{
class = AIMessageErrorOutOfFuel,
hasFinished = true,
releaseMessage = g_infoTextManager.FUEL_IS_EMPTY,
event = "onCpFuelEmpty"
},
{
class = AIMessageErrorVehicleBroken,
hasFinished = true,
releaseMessage = g_infoTextManager.IS_COMPLETELY_BROKEN,
event = "onCpBroken"
},
}

function CpAIWorker.initSpecialization()
local schema = Vehicle.xmlSchemaSavegame
end
Expand Down Expand Up @@ -105,6 +139,18 @@ function CpAIWorker:onUpdateTick(dt, isActiveForInput, isActiveForInputIgnoreSel
CpAIWorker.updateActionEvents(self)
end

function CpAIWorker.getMessageData(message)
local hasFinished, releaseMessage, event
for _, data in pairs(CpAIWorker.messages) do
if message:isa(data.class) then
hasFinished = data.hasFinished
releaseMessage = data.releaseMessage
event = data.event
end
end
return hasFinished, releaseMessage, event
end


--- Used to enable/disable release of the helper
--- and handles post release functionality with for example auto drive.
Expand All @@ -116,28 +162,8 @@ function CpAIWorker:stopCurrentAIJob(superFunc, message, ...)
CpUtil.infoVehicle(self, "no stop message was given.")
return superFunc(self, message, ...)
end
local hasFinished, releaseMessage, event
if message:isa(AIMessageErrorOutOfFill) then
hasFinished = true
releaseMessage = g_infoTextManager.NEEDS_FILLING
event = "onCpEmpty"
elseif message:isa(AIMessageErrorIsFull) then
hasFinished = true
releaseMessage = g_infoTextManager.NEEDS_UNLOADING
event = "onCpFull"
elseif message:isa(AIMessageSuccessFinishedJob) then
hasFinished = true
releaseMessage = g_infoTextManager.WORK_FINISHED
event = "onCpFinished"
elseif message:isa(AIMessageErrorOutOfFuel) then
hasFinished = true
releaseMessage = g_infoTextManager.FUEL_IS_EMPTY
event = "onCpFuelEmpty"
elseif message:isa(AIMessageErrorVehicleBroken) then
hasFinished = true
releaseMessage = g_infoTextManager.IS_COMPLETELY_BROKEN
event = "onCpBroken"
end
local hasFinished, releaseMessage, event = CpAIWorker.getMessageData(message)

CpUtil.debugVehicle(CpDebug.DBG_FIELDWORK, self, "finished: %s, event: %s",
tostring(hasFinished), tostring(event))

Expand All @@ -160,6 +186,7 @@ function CpAIWorker:stopCurrentAIJob(superFunc, message, ...)
end
end
self:resetCpAllActiveInfoTexts()
--- Only add the info text, if it's available and nobody is in the vehicle.
if not self:getIsControlled() and releaseMessage then
self:setCpInfoTextActive(releaseMessage)
end
Expand Down

0 comments on commit 06cb15c

Please sign in to comment.