aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDiego Martinez <kaeza@users.sf.net>2016-02-09 21:46:22 -0300
committerparamat <mat.gregory@virginmedia.com>2016-02-11 04:23:17 +0000
commit13dd7959dbb62ca9327062181d7c4f04b469c38c (patch)
treed3db1e8ed2ecc0795aa09019dd06201a342ec8ba
parent0f03547b033690932707b2dde1ce3eeb09ddcf7e (diff)
downloadminetest-13dd7959dbb62ca9327062181d7c4f04b469c38c.tar.gz
minetest-13dd7959dbb62ca9327062181d7c4f04b469c38c.tar.bz2
minetest-13dd7959dbb62ca9327062181d7c4f04b469c38c.zip
Initialize facedir and wallmounted tables only once.
This makes the functions a bit faster since they don't have to recreate the tables every invocation, and makes the code more readable. Also, document `wallmounted_to_dir`. The function was implemented but not documented in `lua_api.txt`.
-rw-r--r--builtin/game/item.lua57
-rw-r--r--doc/lua_api.txt2
2 files changed, 31 insertions, 28 deletions
diff --git a/builtin/game/item.lua b/builtin/game/item.lua
index c168bf096..c42aff5b0 100644
--- a/builtin/game/item.lua
+++ b/builtin/game/item.lua
@@ -88,25 +88,26 @@ function core.dir_to_facedir(dir, is6d)
end
end
+-- Table of possible dirs
+local facedir_to_dir = {
+ {x= 0, y=0, z= 1},
+ {x= 1, y=0, z= 0},
+ {x= 0, y=0, z=-1},
+ {x=-1, y=0, z= 0},
+ {x= 0, y=-1, z= 0},
+ {x= 0, y=1, z= 0},
+}
+-- Mapping from facedir value to index in facedir_to_dir.
+local facedir_to_dir_map = {
+ [0]=1, 2, 3, 4,
+ 5, 2, 6, 4,
+ 6, 2, 5, 4,
+ 1, 5, 3, 6,
+ 1, 6, 3, 5,
+ 1, 4, 3, 2,
+}
function core.facedir_to_dir(facedir)
- --a table of possible dirs
- return ({{x=0, y=0, z=1},
- {x=1, y=0, z=0},
- {x=0, y=0, z=-1},
- {x=-1, y=0, z=0},
- {x=0, y=-1, z=0},
- {x=0, y=1, z=0}})
-
- --indexed into by a table of correlating facedirs
- [({[0]=1, 2, 3, 4,
- 5, 2, 6, 4,
- 6, 2, 5, 4,
- 1, 5, 3, 6,
- 1, 6, 3, 5,
- 1, 4, 3, 2})
-
- --indexed into by the facedir in question
- [facedir]]
+ return facedir_to_dir[facedir_to_dir_map[facedir]]
end
function core.dir_to_wallmounted(dir)
@@ -131,17 +132,17 @@ function core.dir_to_wallmounted(dir)
end
end
+-- table of dirs in wallmounted order
+local wallmounted_to_dir = {
+ [0] = {x = 0, y = 1, z = 0},
+ {x = 0, y = -1, z = 0},
+ {x = 1, y = 0, z = 0},
+ {x = -1, y = 0, z = 0},
+ {x = 0, y = 0, z = 1},
+ {x = 0, y = 0, z = -1},
+}
function core.wallmounted_to_dir(wallmounted)
- -- table of dirs in wallmounted order
- return ({[0] = {x = 0, y = 1, z = 0},
- {x = 0, y = -1, z = 0},
- {x = 1, y = 0, z = 0},
- {x = -1, y = 0, z = 0},
- {x = 0, y = 0, z = 1},
- {x = 0, y = 0, z = -1}})
-
- --indexed into by the wallmounted in question
- [wallmounted]
+ return wallmounted_to_dir[wallmounted]
end
function core.get_node_drops(nodename, toolname)
diff --git a/doc/lua_api.txt b/doc/lua_api.txt
index 5f4e06423..d9a8bea97 100644
--- a/doc/lua_api.txt
+++ b/doc/lua_api.txt
@@ -2153,6 +2153,8 @@ and `minetest.auth_reload` call the authetification handler.
* Convert a facedir back into a vector aimed directly out the "back" of a node
* `minetest.dir_to_wallmounted(dir)`
* Convert a vector to a wallmounted value, used for `paramtype2="wallmounted"`
+* `minetest.wallmounted_to_dir(wallmounted)`
+ * Convert a wallmounted value back into a vector aimed directly out the "back" of a node
* `minetest.get_node_drops(nodename, toolname)`
* Returns list of item names.
* **Note**: This will be removed or modified in a future version.