mirror of
https://github.com/appgurueu/modlib.git
synced 2024-11-29 10:43:43 +01:00
Additional configuration formats, experimental vector library, other utilities
This commit is contained in:
parent
e5266d9862
commit
68b5c4013f
@ -12,7 +12,9 @@ Mostly self-documenting code. Mod namespace is `modlib` or `_ml`, containing all
|
|||||||
|
|
||||||
## Configuration
|
## Configuration
|
||||||
|
|
||||||
1. Configuration is loaded from `<worldpath>/config/<modname>.<extension>`, the following extensions are supported and will be searched for (in that order):
|
1. Configuration is loaded from `<worldpath>/config/<modname>.<extension>`, the following extensions are supported and loaded (in the given order), with loaded configurations overriding properties of previous ones:
|
||||||
1. [`json`](https://json.org)
|
1. [`json`](https://json.org)
|
||||||
2. [`conf`](https://github.com/minetest/minetest/blob/master/doc/lua_api.txt)
|
2. [`lua`](https://lua.org)
|
||||||
2. Settings are loaded and override configuration values
|
3. [`luon`](https://github.com/appgurueu/luon), Lua but without the `return`
|
||||||
|
4. [`conf`](https://github.com/minetest/minetest/blob/master/doc/lua_api.txt)
|
||||||
|
2. Settings are loaded from `minetest.conf` and override configuration values
|
15
conf.lua
15
conf.lua
@ -89,14 +89,27 @@ function load_or_create(filename, replacement_file, constraints)
|
|||||||
end
|
end
|
||||||
function import(modname, constraints, no_settingtypes)
|
function import(modname, constraints, no_settingtypes)
|
||||||
local default_config = modlib.mod.get_resource(modname, "default_config.json")
|
local default_config = modlib.mod.get_resource(modname, "default_config.json")
|
||||||
|
local default_conf = minetest.parse_json(modlib.file.read(default_config))
|
||||||
local config = load_or_create(get_path(modname)..".json", default_config, constraints)
|
local config = load_or_create(get_path(modname)..".json", default_config, constraints)
|
||||||
|
local formats = {
|
||||||
|
{ extension = ".lua", load = minetest.deserialize },
|
||||||
|
{ extension = ".luon", load = function(text) minetest.deserialize("return "..text) end },
|
||||||
|
{ extension = ".conf", load = function(text) return fix_types(build_tree(read_conf(text)), constraints) end }
|
||||||
|
}
|
||||||
|
for _, format in ipairs(formats) do
|
||||||
|
local conf = modlib.file.read(get_path(modname)..format.extension)
|
||||||
|
if conf then
|
||||||
|
config = merge_config(config, format.load(conf))
|
||||||
|
end
|
||||||
|
end
|
||||||
if not no_settingtypes then
|
if not no_settingtypes then
|
||||||
constraints.name = modname
|
constraints.name = modname
|
||||||
local settingtypes = generate_settingtypes(minetest.parse_json(modlib.file.read(default_config)), constraints)
|
local settingtypes = generate_settingtypes(default_conf, constraints)
|
||||||
modlib.file.write(modlib.mod.get_resource(modname, "settingtypes.txt"), settingtypes)
|
modlib.file.write(modlib.mod.get_resource(modname, "settingtypes.txt"), settingtypes)
|
||||||
end
|
end
|
||||||
local additional_settings = modlib.conf.settings[modname] or {}
|
local additional_settings = modlib.conf.settings[modname] or {}
|
||||||
additional_settings = fix_types(additional_settings, constraints)
|
additional_settings = fix_types(additional_settings, constraints)
|
||||||
|
-- TODO implement merge_config_legal(default_conf, ...)
|
||||||
config = merge_config(config, additional_settings)
|
config = merge_config(config, additional_settings)
|
||||||
if constraints then
|
if constraints then
|
||||||
check_config_constraints(config, constraints, function(message)
|
check_config_constraints(config, constraints, function(message)
|
||||||
|
11
player.lua
11
player.lua
@ -83,3 +83,14 @@ minetest.register_on_leaveplayer(
|
|||||||
delete_player_data(playername)
|
delete_player_data(playername)
|
||||||
end
|
end
|
||||||
)
|
)
|
||||||
|
|
||||||
|
function datatable(table, default)
|
||||||
|
table = table or {}
|
||||||
|
default = default or {}
|
||||||
|
minetest.register_on_joinplayer(function(player)
|
||||||
|
local name = player:get_player_name()
|
||||||
|
table[name] = table[name] or default
|
||||||
|
end)
|
||||||
|
minetest.register_on_leaveplayer(function(player) table[player:get_player_name()] = nil end)
|
||||||
|
return table
|
||||||
|
end
|
@ -304,4 +304,12 @@ function reverse(list)
|
|||||||
list[len-i+1], list[i] = list[i], list[len-i+1]
|
list[len-i+1], list[i] = list[i], list[len-i+1]
|
||||||
end
|
end
|
||||||
return list
|
return list
|
||||||
|
end
|
||||||
|
|
||||||
|
function repetition(value, count)
|
||||||
|
local table = {}
|
||||||
|
for i = 1, count do
|
||||||
|
table[i] = value
|
||||||
|
end
|
||||||
|
return table
|
||||||
end
|
end
|
53
vector.lua
Normal file
53
vector.lua
Normal file
@ -0,0 +1,53 @@
|
|||||||
|
local mt_vector = vector
|
||||||
|
local vector = getfenv(1)
|
||||||
|
|
||||||
|
function new(v)
|
||||||
|
return setmetatable(v, vector)
|
||||||
|
end
|
||||||
|
|
||||||
|
function from_xyzw(v)
|
||||||
|
return new{v.x, v.y, v.z, v.w}
|
||||||
|
end
|
||||||
|
|
||||||
|
function to_xyzw(v)
|
||||||
|
return {x = v[1], y = v[2], z = v[3], w = v[4]}
|
||||||
|
end
|
||||||
|
|
||||||
|
function to_minetest(v)
|
||||||
|
return mt_vector.new(unpack(v))
|
||||||
|
end
|
||||||
|
|
||||||
|
function combine(v1, v2, f)
|
||||||
|
local v = {}
|
||||||
|
for k, c in pairs(v1) do
|
||||||
|
v[k] = f(c, v2[k])
|
||||||
|
end
|
||||||
|
return new(v)
|
||||||
|
end
|
||||||
|
|
||||||
|
function apply(v, s, f)
|
||||||
|
for i, c in pairs(v) do
|
||||||
|
v[i] = f(c, s)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
function combinator(f)
|
||||||
|
return function(v1, v2)
|
||||||
|
return combine(v1, v2, f)
|
||||||
|
end, function(v, s)
|
||||||
|
return apply(v, s, f)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
add, add_scalar = combinator(function(a, b) return a + b end)
|
||||||
|
subtract, subtract_scalar = combinator(function(a, b) return a - b end)
|
||||||
|
multiply, multiply_scalar = combinator(function(a, b) return a * b end)
|
||||||
|
divide, divide_scalar = combinator(function(a, b) return a / b end)
|
||||||
|
|
||||||
|
function length(v)
|
||||||
|
local sum = 0
|
||||||
|
for _, c in pairs(v) do
|
||||||
|
sum = sum + c*c
|
||||||
|
end
|
||||||
|
return math.sqrt(sum)
|
||||||
|
end
|
Loading…
Reference in New Issue
Block a user