summaryrefslogtreecommitdiff
path: root/library/lua/dfhack.lua
diff options
context:
space:
mode:
Diffstat (limited to 'library/lua/dfhack.lua')
-rw-r--r--library/lua/dfhack.lua49
1 files changed, 38 insertions, 11 deletions
diff --git a/library/lua/dfhack.lua b/library/lua/dfhack.lua
index 86ea1459..ce3be5a8 100644
--- a/library/lua/dfhack.lua
+++ b/library/lua/dfhack.lua
@@ -46,6 +46,7 @@ end
-- Error handling
safecall = dfhack.safecall
+curry = dfhack.curry
function dfhack.pcall(f, ...)
return xpcall(f, dfhack.onerror, ...)
@@ -83,7 +84,7 @@ function mkmodule(module,env)
error("Not a table in package.loaded["..module.."]")
end
end
- local plugname = string.match(module,'^plugins%.(%w+)$')
+ local plugname = string.match(module,'^plugins%.([%w%-]+)$')
if plugname then
dfhack.open_plugin(pkg,plugname)
end
@@ -102,11 +103,32 @@ function reload(module)
dofile(path)
end
+-- Trivial classes
+
+function rawset_default(target,source)
+ for k,v in pairs(source) do
+ if rawget(target,k) == nil then
+ rawset(target,k,v)
+ end
+ end
+end
+
+DEFAULT_NIL = DEFAULT_NIL or {} -- Unique token
+
+function defclass(...)
+ return require('class').defclass(...)
+end
+
+function mkinstance(...)
+ return require('class').mkinstance(...)
+end
+
-- Misc functions
function printall(table)
- if type(table) == 'table' or df.isvalid(table) == 'ref' then
- for k,v in pairs(table) do
+ local ok,f,t,k = pcall(pairs,table)
+ if ok then
+ for k,v in f,t,k do
print(string.format("%-23s\t = %s",tostring(k),tostring(v)))
end
end
@@ -135,14 +157,23 @@ function xyz2pos(x,y,z)
end
end
-function rawset_default(target,source)
- for k,v in pairs(source) do
- if rawget(target,k) == nil then
- rawset(target,k,v)
+function pos2xy(pos)
+ if pos then
+ local x = pos.x
+ if x and x ~= -30000 then
+ return x, pos.y
end
end
end
+function xy2pos(x,y)
+ if x then
+ return {x=x,y=y}
+ else
+ return {x=-30000,y=-30000}
+ end
+end
+
function safe_index(obj,idx,...)
if obj == nil or idx == nil then
return nil
@@ -160,10 +191,6 @@ end
-- String conversions
-function dfhack.event:__tostring()
- return "<event>"
-end
-
function dfhack.persistent:__tostring()
return "<persistent "..self.entry_id..":"..self.key.."=\""
..self.value.."\":"..table.concat(self.ints,",")..">"