296 lines
10 KiB
Lua
296 lines
10 KiB
Lua
---
|
|
---Description of the module.
|
|
---@class EventController
|
|
local EventController = {
|
|
---single-line comment
|
|
classname = "HMEventController"
|
|
}
|
|
|
|
defines.events.on_prepare=script.generate_event_name()
|
|
-------------------------------------------------------------------------------
|
|
---Start
|
|
function EventController.start()
|
|
script.on_init(EventController.onInit)
|
|
script.on_load(EventController.onLoad)
|
|
script.on_configuration_changed(EventController.onConfigurationChanged)
|
|
EventController.pcallEvent(defines.events.on_tick, EventController.onTick)
|
|
EventController.pcallEvent(defines.events.on_gui_click, EventController.onGuiClickButton)
|
|
EventController.pcallEvent(defines.events.on_gui_text_changed, EventController.onGuiTextChanged)
|
|
EventController.pcallEvent(defines.events.on_prepare, EventController.onPrepare)
|
|
|
|
EventController.pcallEvent(defines.events.on_gui_confirmed, EventController.onGuiClick)
|
|
EventController.pcallEvent(defines.events.on_gui_value_changed, EventController.onGuiClick)
|
|
EventController.pcallEvent(defines.events.on_gui_selection_state_changed, EventController.onGuiClick)
|
|
EventController.pcallEvent(defines.events.on_gui_switch_state_changed, EventController.onGuiClick)
|
|
EventController.pcallEvent(defines.events.on_gui_elem_changed, EventController.onGuiClick)
|
|
EventController.pcallEvent(defines.events.on_gui_checked_state_changed, EventController.onGuiClick)
|
|
EventController.pcallEvent(defines.events.on_gui_selected_tab_changed, EventController.onGuiClick)
|
|
|
|
EventController.pcallEvent(defines.events.on_player_created, EventController.onPlayerCreated)
|
|
EventController.pcallEvent(defines.events.on_player_joined_game, EventController.onPlayerJoinedGame)
|
|
EventController.pcallEvent(defines.events.on_runtime_mod_setting_changed, EventController.onRuntimeModSettingChanged)
|
|
EventController.pcallEvent(defines.events.on_console_command, EventController.onConsoleCommand)
|
|
EventController.pcallEvent(defines.events.on_gui_location_changed, EventController.onGuiLocationChanged)
|
|
|
|
EventController.pcallEvent(defines.events.on_string_translated, EventController.onStringTranslated)
|
|
|
|
EventController.pcallEvent(defines.events.on_lua_shortcut, EventController.onShortcut)
|
|
|
|
--EventController.pcallNthTick(10, EventController.onNthTick)
|
|
---event hotkey
|
|
EventController.pcallEvent("helmod-close", EventController.onCustomInput)
|
|
EventController.pcallEvent("helmod-open-close", EventController.onCustomInput)
|
|
EventController.pcallEvent("helmod-recipe-selector-open", EventController.onCustomInput)
|
|
EventController.pcallEvent("helmod-production-line-open", EventController.onCustomInput)
|
|
EventController.pcallEvent("helmod-recipe-explorer-open", EventController.onCustomInput)
|
|
EventController.pcallEvent("helmod-richtext-open", EventController.onCustomInput)
|
|
end
|
|
|
|
-------------------------------------------------------------------------------
|
|
---On input valid
|
|
---@param event LuaEvent
|
|
function EventController.onCustomInput(event)
|
|
if event ~= nil and event.player_index ~= nil then
|
|
Player.load(event)
|
|
Dispatcher:send("on_gui_hotkey", event, Controller.classname)
|
|
end
|
|
end
|
|
|
|
-------------------------------------------------------------------------------
|
|
---On shortcut clicked
|
|
---@param event LuaEvent
|
|
function EventController.onShortcut(event)
|
|
if event ~= nil and event.player_index ~= nil then
|
|
Player.load(event)
|
|
Dispatcher:send("on_gui_shortcut", event, Controller.classname)
|
|
end
|
|
end
|
|
|
|
-------------------------------------------------------------------------------
|
|
---EventController callback
|
|
---@param tick number
|
|
---@param callback function
|
|
function EventController.pcallNthTick(tick, callback)
|
|
local ok , err = pcall(function()
|
|
script.on_nth_tick(tick,callback)
|
|
end)
|
|
if not(ok) then
|
|
log("Helmod: defined on_nth_tick is not valid!")
|
|
log(err)
|
|
end
|
|
end
|
|
|
|
-------------------------------------------------------------------------------
|
|
---EventController callback
|
|
---@param event_type string|defines.events
|
|
---@param callback function
|
|
function EventController.pcallEvent(event_type, callback)
|
|
local ok , err = pcall(function()
|
|
script.on_event(event_type,callback)
|
|
end)
|
|
if not(ok) then
|
|
log("Helmod: defined event "..event_type.." is not valid!")
|
|
log(err)
|
|
end
|
|
end
|
|
|
|
-------------------------------------------------------------------------------
|
|
---On init
|
|
function EventController.onInit()
|
|
Command.start()
|
|
Controller:on_init()
|
|
end
|
|
|
|
-------------------------------------------------------------------------------
|
|
---On load
|
|
---@param event LuaEvent
|
|
function EventController.onLoad(event)
|
|
Command.start()
|
|
end
|
|
|
|
-------------------------------------------------------------------------------
|
|
---On Research Finished
|
|
---@param event LuaEvent
|
|
function EventController.onResearchFinished(event)
|
|
--Cache.reset()
|
|
--Player.print("Caches are reseted!")
|
|
end
|
|
|
|
-------------------------------------------------------------------------------
|
|
---On console command
|
|
---@param event LuaEvent
|
|
function EventController.onConsoleCommand(event)
|
|
if event ~= nil and event.player_index ~= nil then
|
|
Player.load(event)
|
|
Command.parse(event)
|
|
end
|
|
end
|
|
|
|
-------------------------------------------------------------------------------
|
|
---On load
|
|
---@deprecated
|
|
---@param event LuaEvent
|
|
function EventController.onGuiClosed(event)
|
|
if event ~= nil and event.player_index ~= nil then
|
|
Player.load(event)
|
|
Controller:onGuiClosed(event)
|
|
end
|
|
end
|
|
|
|
-------------------------------------------------------------------------------
|
|
---On configuration changed
|
|
---@param data table
|
|
---Data sample:
|
|
---data = {
|
|
--- "old_version":"0.14.17",
|
|
--- "new_version":"0.14.20",
|
|
--- "mod_changes":{
|
|
--- "base":{"old_version":"0.14.17","new_version":"0.14.20"},
|
|
--- "helmod":{"old_version":"0.2.14","new_version":"0.2.16"}
|
|
--- }
|
|
---}
|
|
--
|
|
function EventController.onConfigurationChanged(data)
|
|
if not data or not data.mod_changes then
|
|
return
|
|
end
|
|
local ok , err = pcall(function()
|
|
if data.mod_changes["helmod"] then
|
|
--initialise au chargement d'une partie existante
|
|
for _,player in pairs(game.players) do
|
|
Player.set(player)
|
|
Controller:cleanController(player)
|
|
Controller:bindController(player)
|
|
end
|
|
end
|
|
|
|
Cache.reset()
|
|
|
|
for _,player in pairs(game.players) do
|
|
Player.set(player)
|
|
User.resetCache()
|
|
User.resetTranslate()
|
|
end
|
|
|
|
Controller:on_init()
|
|
end)
|
|
if not(ok) then
|
|
log(err)
|
|
end
|
|
end
|
|
|
|
-------------------------------------------------------------------------------
|
|
---On Location Changed
|
|
---@param event LuaEvent
|
|
function EventController.onGuiLocationChanged(event)
|
|
if event ~= nil and event.player_index ~= nil then
|
|
Player.load(event)
|
|
Dispatcher:send("on_gui_location", event)
|
|
end
|
|
end
|
|
|
|
-------------------------------------------------------------------------------
|
|
---On tick
|
|
---@param event LuaEvent
|
|
function EventController.onTick(event)
|
|
Controller:onTick(event)
|
|
end
|
|
|
|
-------------------------------------------------------------------------------
|
|
---On nth tick
|
|
---@param NthTickEvent table {tick=number, nth_tick=number}
|
|
function EventController.onNthTick(NthTickEvent)
|
|
Controller:onNthTick(NthTickEvent)
|
|
end
|
|
|
|
-------------------------------------------------------------------------------
|
|
---On string translated
|
|
---@param event table {player_index=number, localised_ string=string, result=string, translated=boolean}
|
|
function EventController.onStringTranslated(event)
|
|
Player.load(event)
|
|
Controller:onStringTranslated(event)
|
|
end
|
|
|
|
|
|
-------------------------------------------------------------------------------
|
|
---On click button
|
|
---@param event LuaEvent
|
|
---Filter allowed element: "button", "sprite-button", "choose-elem-button"
|
|
---Bypass: add bypass in element.name
|
|
function EventController.onGuiClickButton(event)
|
|
if event ~= nil and event.player_index ~= nil and event.element ~= nil and (table.contains({"button", "sprite-button", "choose-elem-button"}, event.element.type) or string.find(event.element.name, "bypass")) then
|
|
Player.load(event)
|
|
Dispatcher:send("on_gui_action", event, Controller.classname)
|
|
end
|
|
end
|
|
|
|
-------------------------------------------------------------------------------
|
|
---On click event
|
|
---@param event LuaEvent
|
|
function EventController.onGuiClick(event)
|
|
if event ~= nil and event.player_index ~= nil then
|
|
Player.load(event)
|
|
Dispatcher:send("on_gui_action", event, Controller.classname)
|
|
end
|
|
end
|
|
|
|
-------------------------------------------------------------------------------
|
|
---On text changed
|
|
---@param event LuaEvent
|
|
function EventController.onGuiTextChanged(event)
|
|
if event ~= nil and event.player_index ~= nil and event.element ~= nil then
|
|
Player.load(event)
|
|
if string.find(event.element.name, "onchange") then
|
|
Dispatcher:send("on_gui_action", event, Controller.classname)
|
|
end
|
|
if string.find(event.element.name, "onqueue") then
|
|
Dispatcher:send("on_gui_queue", event, Controller.classname)
|
|
end
|
|
end
|
|
end
|
|
|
|
-------------------------------------------------------------------------------
|
|
---On runtime mod settings
|
|
---@param event LuaEvent
|
|
function EventController.onRuntimeModSettingChanged(event)
|
|
if event ~= nil and event.player_index ~= nil then
|
|
Player.load(event)
|
|
Dispatcher:send("on_gui_setting", event, Controller.classname)
|
|
end
|
|
end
|
|
|
|
-------------------------------------------------------------------------------
|
|
---On player created
|
|
---@param event LuaEvent
|
|
function EventController.onPlayerCreated(event)
|
|
if event ~= nil and event.player_index ~= nil then
|
|
local player = Player.load(event).native()
|
|
Controller:bindController(player)
|
|
User.setParameter("next_event", nil)
|
|
end
|
|
end
|
|
|
|
-------------------------------------------------------------------------------
|
|
---On player join game
|
|
---@param event LuaEvent
|
|
function EventController.onPlayerJoinedGame(event)
|
|
if event ~= nil and event.player_index ~= nil then
|
|
local player = Player.load(event).native()
|
|
Controller:bindController(player)
|
|
User.setParameter("next_event", nil)
|
|
end
|
|
end
|
|
|
|
-------------------------------------------------------------------------------
|
|
---On prepare
|
|
---@param event LuaEvent
|
|
function EventController.onPrepare(event)
|
|
if event ~= nil and event.player_index ~= nil then
|
|
event.tick = game.tick
|
|
Player.load(event)
|
|
Dispatcher:send("on_gui_event", event, Controller.classname)
|
|
end
|
|
end
|
|
|
|
return EventController
|