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