From ab4807fee0889cd814229be126ac219b758e31fc Mon Sep 17 00:00:00 2001 From: Linden <65407488+thelindat@users.noreply.github.com> Date: Thu, 11 Nov 2021 07:52:38 +1100 Subject: [PATCH] refactor: remove modules system and fix indentation Setting a "standard" module and resource structure is too limiting, so stick to import only. --- .editorconfig | 16 ++++++++++ fxmanifest.lua | 4 +-- imports/callbacks/client.lua | 46 +++++++++++++-------------- imports/callbacks/server.lua | 20 ++++++------ init.lua | 61 +++++++++++++----------------------- shared.lua | 44 -------------------------- 6 files changed, 72 insertions(+), 119 deletions(-) create mode 100644 .editorconfig delete mode 100644 shared.lua diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..deef933 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,16 @@ +# EditorConfig is awesome: https://EditorConfig.org + +# top-most EditorConfig file +root = true + +[*] +end_of_line = lf +insert_final_newline = false +charset = utf-8 +trim_trailing_whitespace = true +indent_size = 2 +indent_style = space + +[*.lua] +indent_size = 4 +indent_style = tab \ No newline at end of file diff --git a/fxmanifest.lua b/fxmanifest.lua index 643d978..088a3dd 100644 --- a/fxmanifest.lua +++ b/fxmanifest.lua @@ -21,10 +21,10 @@ lua54 'yes' game 'gta5' --[[ Resource Information ]]-- -name 'library' +name 'lua library' author 'Linden' version '1.0.0' -repository 'https://github.com/project-error/pe-lib' +repository 'https://github.com/project-error/pe-lualib' description 'A library of shared functions to utilise in other resources.' --[[ Manifest ]]-- diff --git a/imports/callbacks/client.lua b/imports/callbacks/client.lua index 74d1e38..c44cd7e 100644 --- a/imports/callbacks/client.lua +++ b/imports/callbacks/client.lua @@ -1,13 +1,13 @@ local ServerCallbacks = {} local function CallbackTimer(event, delay) - if type(delay) == 'number' then - local time = GetGameTimer() - if (ServerCallbacks[event] or 0) > time then - return false - end - ServerCallbacks[event] = time + delay - end + if type(delay) == 'number' then + local time = GetGameTimer() + if (ServerCallbacks[event] or 0) > time then + return false + end + ServerCallbacks[event] = time + delay + end end local ServerCallback = table.create(0, 2) @@ -16,28 +16,28 @@ local ServerCallback = table.create(0, 2) ---@param event string ---@param delay number ServerCallback.Await = function(resource, event, delay, ...) - CallbackTimer(event, delay) - event = ('__cb_%s:%s'):format(resource, event) - TriggerServerEvent(event, ...) - local promise = promise.new() - event = RegisterNetEvent(event, function(...) - promise:resolve({...}) - RemoveEventHandler(event) - end) - return table.unpack(Citizen.Await(promise)) + CallbackTimer(event, delay) + event = ('__cb_%s:%s'):format(resource, event) + TriggerServerEvent(event, ...) + local promise = promise.new() + event = RegisterNetEvent(event, function(...) + promise:resolve({...}) + RemoveEventHandler(event) + end) + return table.unpack(Citizen.Await(promise)) end --- Sends an event to the server and triggers a callback function once the response is returned. ---@param event string ---@param delay number ServerCallback.Async = function(resource, event, delay, cb, ...) - CallbackTimer(event, delay) - event = ('__cb_%s:%s'):format(resource, event) - TriggerServerEvent(event, ...) - event = RegisterNetEvent(event, function(...) - cb(...) - RemoveEventHandler(event) - end) + CallbackTimer(event, delay) + event = ('__cb_%s:%s'):format(resource, event) + TriggerServerEvent(event, ...) + event = RegisterNetEvent(event, function(...) + cb(...) + RemoveEventHandler(event) + end) end return ServerCallback diff --git a/imports/callbacks/server.lua b/imports/callbacks/server.lua index fcb61a1..16d4bc5 100644 --- a/imports/callbacks/server.lua +++ b/imports/callbacks/server.lua @@ -1,16 +1,14 @@ -local ServerCallbacks = {} - local ServerCallback = { - Register = function(name, callback) - name = ('__cb_%s:%s'):format(GetCurrentResourceName(), name) + Register = function(name, callback) + name = ('__cb_%s:%s'):format(GetCurrentResourceName(), name) - RegisterServerEvent(name, function(...) - local source = source - callback(source, function(...) - TriggerClientEvent(name, source, ...) - end, ...) - end) - end + RegisterServerEvent(name, function(...) + local source = source + callback(source, function(...) + TriggerClientEvent(name, source, ...) + end, ...) + end) + end } return ServerCallback \ No newline at end of file diff --git a/init.lua b/init.lua index 2dbbe4d..be1dd37 100644 --- a/init.lua +++ b/init.lua @@ -1,53 +1,36 @@ if not _VERSION:find('5.4') then - error('^1Lua 5.4 must be enabled in the resource manifest!^0', 0) + error('^1Lua 5.4 must be enabled in the resource manifest!^0', 3) end -local LIBRARY = 'library' +local LIBRARY = 'pe-lualib' local SERVICE = IsDuplicityVersion() and 'server' or 'client' -local RESOURCE = GetCurrentResourceName() +local IMPORTS = {} -local MODULES = {} -local IMPORTS = {} - -local function LoadModule(file, import) - if (import and not IMPORTS[file]) or (not import and not MODULES[file]) then - file = import and ('imports/%s'):format(file) or file - local chunk = LoadResourceFile(import or RESOURCE, ('%s/%s.lua'):format(file, SERVICE)) - local shared = LoadResourceFile(import or RESOURCE, ('%s/shared.lua'):format(file)) - if shared then - chunk = (chunk and ('%s\n%s'):format(shared, chunk)) or shared - end - if chunk then - chunk, err = load(chunk, ('@@%s.lua'):format(SERVICE), 't') - if err then - error(('\n^1Error loading module (%s): %s^0'):format(file, err), 0) - else - if import then IMPORTS[file] = chunk() else MODULES[file] = chunk() end - end - else error(('\n^3Unable to load module (%s)^0'):format(file), 0) end - end - return (import and IMPORTS[file]) or MODULES[file] +local function loadFile(file) + local dir = ('imports/%s'):format(file) + local chunk = LoadResourceFile(LIBRARY, ('%s/%s.lua'):format(dir, SERVICE)) + local shared = LoadResourceFile(LIBRARY, ('%s/shared.lua'):format(dir)) + if shared then + chunk = (chunk and ('%s\n%s'):format(shared, chunk)) or shared + end + if chunk then + local err + chunk, err = load(chunk, ('@@%s.lua'):format(SERVICE), 't') + if err then + error(('\n^1Error importing module (%s): %s^0'):format(dir, err), 3) + else + IMPORTS[file] = chunk() + end + else error(('\n^3Unable to import module (%s)^0'):format(dir), 3) end end ----Loads a module from within the current resource. ----If the module has already been loaded then it will reference the existing chunk. ----@param file string ----@return table -function include(file) return LoadModule(file) end - ---Loads a module from the library. ---If the module has already been loaded then it will reference the existing chunk. ---@param file string ---@return table -function import(file) return LoadModule(file, LIBRARY) end - -do - local chunk, err = LoadResourceFile(RESOURCE, ('%s.lua'):format(SERVICE)) - local shared = LoadResourceFile(RESOURCE, ('shared.lua')) - if shared then chunk = (chunk and ('%s\n%s'):format(shared, chunk)) or shared end - chunk, err = load(chunk, ('@@%s/%s.lua'):format(RESOURCE, SERVICE), 't') - assert(chunk, ('^1%s^0'):format(err)) - chunk() +function import(file) + if not IMPORTS[file] then loadFile(file) end + return IMPORTS[file] end -- Library diff --git a/shared.lua b/shared.lua deleted file mode 100644 index e5ebcd5..0000000 --- a/shared.lua +++ /dev/null @@ -1,44 +0,0 @@ -local SERVICE = IsDuplicityVersion() and 'server' or 'client' -local RESOURCE = GetCurrentResourceName() - -local MODULES = {} - -local function LoadChunk(file) - local chunk = LoadResourceFile(RESOURCE, ('imports/%s/%s.lua'):format(file, SERVICE)) - local shared = LoadResourceFile(RESOURCE, ('imports/%s/shared.lua'):format(file)) - if shared then - chunk = chunk and ('%s\n%s'):format(shared, chunk) or shared - end - if chunk then - return chunk and load(chunk, ('@%s.lua'):format(SERVICE), 't') - end - assert(nil, ('\n^Unable to load module (%s): module does not exist^0'):format(file)) -end - -function M(file) - if not MODULES[file] then - local chunk, err = LoadChunk(file) - if err then - assert(nil, ('\n^1Error loading module (%s): %s^0'):format(file, err)) - else - MODULES[file] = chunk() - end - end - return MODULES[file] -end - --- Library --- Copyright (C) 2021 Linden - --- This program is free software: you can redistribute it and/or modify --- it under the terms of the GNU General Public License as published by --- the Free Software Foundation, either version 3 of the License, or --- (at your option) any later version. - --- This program is distributed in the hope that it will be useful, --- but WITHOUT ANY WARRANTY; without even the implied warranty of --- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the --- GNU General Public License for more details. - --- You should have received a copy of the GNU General Public License --- along with this program. If not, see \ No newline at end of file