1
0
Fork 0
mirror of https://github.com/Reuh/ubiquitousse.git synced 2025-10-27 17:19:31 +00:00
ubiquitousse/init.lua

110 lines
4.6 KiB
Lua

-- ubiquitousse
--- Ubiquitousse main module.
-- Set of various Lua libraries to make game development easier, mainly made to be used alongside the [LÖVE](https://love2d.org/) game framework.
-- Nothing that hasn't been done before, but these are tailored to what I need. They can be used independently too, and are relatively portable, even without LÖVE.
--
-- This is the main module, which will try to load every other Ubiquitousse module when required and may even provide a few convenience functions.
--
-- This also perform a quick LÖVE version check and show a warning in case of potential incompatibility.
--
-- **Regarding Ubiquitousse's organization**
--
-- Ubiquitousse may or may not be used in its totality. You can delete the modules directories you don't need and Ubiquitousse
-- should adapt accordingly. You can also simply copy the modules directories you need and use them directly, without using this
-- file at all.
-- However, some modules may provide more feature when other modules are available.
-- These dependencies are written at the top of every main module file.
--
-- Ubiquitousse's original goal was to run everywhere with the least porting effort possible, so while the current version now mainly focus LÖVE, it
-- should still be easily modifiable to work with something else. Ubiquitousse is mainly tested on LuaJIT and Lua 5.3 but should also support Lua 5.1 and 5.2.
-- In order to keep a good idea of how portable this all is, other dependencies, including LÖVE, are explicited at the top of every module file and in specific
-- functions definition using the `@require` tag (e.g., `-- @require love` for LÖVE).
--
-- Some modules are developped in [Candran](https://github.com/Reuh/candran) (.can files), but can easily be compiled into regular Lua code.
--
-- Units used in the API documentation, unless written otherwise:
--
-- * All distances are expressed in pixels (px)
-- * All durations are expressed in seconds (ms)
--
-- These units are only used to make writing documentation easier; you can use other units if you want, as long as you're consistent.
--
-- Style:
--
-- * tabs for indentation, spaces for esthetic whitespace (notably in comments)
-- * no globals
-- * UPPERCASE for constants (or maybe not).
-- * CamelCase for class names.
-- * lowerCamelCase is expected for everything else.
--
-- Regarding the documentation: Ubiquitousse used LDoc/LuaDoc styled-comments, but since LDoc hates me and my code, the
-- generated result is complete garbage, so please read the documentation directly in the comments here until fix this.
-- Stuff you're interested in starts with triple - (e.g., "--- This functions saves the world").
--
-- *UPDATE*: I give up, currently in the process of admitting defat to LDoc and progressively porting all my documentation to it.
-- Though I had to modify a few things to get LDoc to like me, so the documentation is generated using [my LDoc fork](https://github.com/Reuh/LDoc).
--
-- @module ubiquitousse
-- @usage local ubiquitousse = require("ubiquitousse")
local p = ... -- require path
local ubiquitousse
ubiquitousse = {
--- Ubiquitousse version string (currently `"0.1.0"`).
version = "0.1.0",
--- Asset manager module, if available.
-- @see asset
asset = nil,
--- Entity Component System, if available.
-- @see ecs
ecs = nil,
--- Input management, if available.
-- @see input
input = nil,
--- LDtk level import, if available.
-- @see ldtk
ldtk = nil,
--- Scene management, if available.
-- @see scene
scene = nil,
--- Signal management, if available.
-- @see signal
signal = nil,
--- Timer utilities, if available.
-- @see timer
timer = nil,
--- Various useful functions, if available.
-- @see util
util = nil
}
-- Check LÖVE version
local madeForLove = { 11, "x", "x" }
local actualLove = { love.getVersion() }
for i, v in ipairs(madeForLove) do
if v ~= "x" and actualLove[i] ~= v then
local txt = ("Ubiquitousse was made for LÖVE %s.%s.%s but %s.%s.%s is used!\nThings may not work as expected.")
:format(madeForLove[1], madeForLove[2], madeForLove[3], actualLove[1], actualLove[2], actualLove[3])
print(txt)
love.window.showMessageBox("Compatibility warning", txt, "warning")
break
end
end
-- We're going to require modules requiring Ubiquitousse, so to avoid stack overflows we already register the ubiquitousse package
package.loaded[p] = ubiquitousse
-- Require external submodules
for _, m in ipairs{"signal", "asset", "ecs", "input", "scene", "timer", "util", "ldtk"} do
local s, t = pcall(require, p.."."..m)
if s then
ubiquitousse[m] = t
elseif not t:match("^module [^n]+ not found") then
error(t)
end
end
return ubiquitousse