Move tool definitions to script
authorPerttu Ahola <celeron55@gmail.com>
Tue, 15 Nov 2011 00:03:28 +0000 (02:03 +0200)
committerPerttu Ahola <celeron55@gmail.com>
Tue, 29 Nov 2011 17:13:43 +0000 (19:13 +0200)
data/scripts/default.lua
src/CMakeLists.txt
src/content_tool.cpp [deleted file]
src/content_tool.h [deleted file]
src/game.cpp
src/scriptapi.cpp
src/server.cpp
src/server.h

index eda7cd25eece1881e5d07bfc3bb661a8db2717b1..d0479d90d02a21c5be56ec1a09b7163f90681dbc 100644 (file)
@@ -113,6 +113,205 @@ end
 
 minetest.register_globalstep(on_step)
 
+minetest.register_tool("WPick", {
+       image = "tool_woodpick.png",
+       basetime = 2.0,
+       dt_weight = 0,
+       dt_crackiness = -0.5,
+       dt_crumbliness = 2,
+       dt_cuttability = 0,
+       basedurability = 50,
+       dd_weight = 0,
+       dd_crackiness = 0,
+       dd_crumbliness = 0,
+       dd_cuttability = 0,
+})
+minetest.register_tool("STPick", {
+       image = "tool_stonepick.png",
+       basetime = 1.5,
+       dt_weight = 0,
+       dt_crackiness = -0.5,
+       dt_crumbliness = 2,
+       dt_cuttability = 0,
+       basedurability = 100,
+       dd_weight = 0,
+       dd_crackiness = 0,
+       dd_crumbliness = 0,
+       dd_cuttability = 0,
+})
+minetest.register_tool("SteelPick", {
+       image = "tool_steelpick.png",
+       basetime = 1.0,
+       dt_weight = 0,
+       dt_crackiness = -0.5,
+       dt_crumbliness = 2,
+       dt_cuttability = 0,
+       basedurability = 300,
+       dd_weight = 0,
+       dd_crackiness = 0,
+       dd_crumbliness = 0,
+       dd_cuttability = 0,
+})
+minetest.register_tool("MesePick", {
+       image = "tool_mesepick.png",
+       basetime = 0,
+       dt_weight = 0,
+       dt_crackiness = 0,
+       dt_crumbliness = 0,
+       dt_cuttability = 0,
+       basedurability = 1337,
+       dd_weight = 0,
+       dd_crackiness = 0,
+       dd_crumbliness = 0,
+       dd_cuttability = 0,
+})
+minetest.register_tool("WShovel", {
+       image = "tool_woodshovel.png",
+       basetime = 2.0,
+       dt_weight = 0.5,
+       dt_crackiness = 2,
+       dt_crumbliness = -1.5,
+       dt_cuttability = 0.3,
+       basedurability = 50,
+       dd_weight = 0,
+       dd_crackiness = 0,
+       dd_crumbliness = 0,
+       dd_cuttability = 0,
+})
+minetest.register_tool("STShovel", {
+       image = "tool_stoneshovel.png",
+       basetime = 1.5,
+       dt_weight = 0.5,
+       dt_crackiness = 2,
+       dt_crumbliness = -1.5,
+       dt_cuttability = 0.1,
+       basedurability = 100,
+       dd_weight = 0,
+       dd_crackiness = 0,
+       dd_crumbliness = 0,
+       dd_cuttability = 0,
+})
+minetest.register_tool("SteelShovel", {
+       image = "tool_steelshovel.png",
+       basetime = 1.0,
+       dt_weight = 0.5,
+       dt_crackiness = 2,
+       dt_crumbliness = -1.5,
+       dt_cuttability = 0.0,
+       basedurability = 300,
+       dd_weight = 0,
+       dd_crackiness = 0,
+       dd_crumbliness = 0,
+       dd_cuttability = 0,
+})
+minetest.register_tool("WAxe", {
+       image = "tool_woodaxe.png",
+       basetime = 2.0,
+       dt_weight = 0.5,
+       dt_crackiness = -0.2,
+       dt_crumbliness = 1,
+       dt_cuttability = -0.5,
+       basedurability = 50,
+       dd_weight = 0,
+       dd_crackiness = 0,
+       dd_crumbliness = 0,
+       dd_cuttability = 0,
+})
+minetest.register_tool("STAxe", {
+       image = "tool_stoneaxe.png",
+       basetime = 1.5,
+       dt_weight = 0.5,
+       dt_crackiness = -0.2,
+       dt_crumbliness = 1,
+       dt_cuttability = -0.5,
+       basedurability = 100,
+       dd_weight = 0,
+       dd_crackiness = 0,
+       dd_crumbliness = 0,
+       dd_cuttability = 0,
+})
+minetest.register_tool("SteelAxe", {
+       image = "tool_steelaxe.png",
+       basetime = 1.0,
+       dt_weight = 0.5,
+       dt_crackiness = -0.2,
+       dt_crumbliness = 1,
+       dt_cuttability = -0.5,
+       basedurability = 300,
+       dd_weight = 0,
+       dd_crackiness = 0,
+       dd_crumbliness = 0,
+       dd_cuttability = 0,
+})
+minetest.register_tool("WSword", {
+       image = "tool_woodsword.png",
+       basetime = 3.0,
+       dt_weight = 3,
+       dt_crackiness = 0,
+       dt_crumbliness = 1,
+       dt_cuttability = -1,
+       basedurability = 50,
+       dd_weight = 0,
+       dd_crackiness = 0,
+       dd_crumbliness = 0,
+       dd_cuttability = 0,
+})
+minetest.register_tool("STSword", {
+       image = "tool_stonesword.png",
+       basetime = 2.5,
+       dt_weight = 3,
+       dt_crackiness = 0,
+       dt_crumbliness = 1,
+       dt_cuttability = -1,
+       basedurability = 100,
+       dd_weight = 0,
+       dd_crackiness = 0,
+       dd_crumbliness = 0,
+       dd_cuttability = 0,
+})
+minetest.register_tool("SteelSword", {
+       image = "tool_steelsword.png",
+       basetime = 2.0,
+       dt_weight = 3,
+       dt_crackiness = 0,
+       dt_crumbliness = 1,
+       dt_cuttability = -1,
+       basedurability = 300,
+       dd_weight = 0,
+       dd_crackiness = 0,
+       dd_crumbliness = 0,
+       dd_cuttability = 0,
+})
+minetest.register_tool("", {
+       image = "",
+       basetime = 0.5,
+       dt_weight = 1,
+       dt_crackiness = 0,
+       dt_crumbliness = -1,
+       dt_cuttability = 0,
+       basedurability = 50,
+       dd_weight = 0,
+       dd_crackiness = 0,
+       dd_crumbliness = 0,
+       dd_cuttability = 0,
+})
+
+--[[
+minetest.register_tool("horribletool", {
+       image = "lava.png",
+       basetime = 2.0
+       dt_weight = 0.2
+       dt_crackiness = 0.2
+       dt_crumbliness = 0.2
+       dt_cuttability = 0.2
+       basedurability = 50
+       dd_weight = -5
+       dd_crackiness = -5
+       dd_crumbliness = -5
+       dd_cuttability = -5
+})
+--]]
+
 local TNT = {
        -- Maybe handle gravity and collision this way? dunno
        physical = true,
index 0f6c567c32761e741f1f6f787e8ee09550ac38be..85060ac705c8bcea218d121692506a302e571822 100644 (file)
@@ -94,7 +94,6 @@ configure_file(
 )
 
 set(common_SRCS
-       content_tool.cpp
        tooldef.cpp
        nodedef.cpp
        luaentity_common.cpp
diff --git a/src/content_tool.cpp b/src/content_tool.cpp
deleted file mode 100644 (file)
index 0cdce8e..0000000
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
-Minetest-c55
-Copyright (C) 2011 celeron55, Perttu Ahola <celeron55@gmail.com>
-
-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 2 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, write to the Free Software Foundation, Inc.,
-51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-
-#include "content_tool.h"
-#include "tooldef.h"
-
-void content_tool_init(IWritableToolDefManager *mgr)
-{
-       mgr->registerTool("WPick",
-                       ToolDefinition("tool_woodpick.png",
-                       ToolDiggingProperties(2.0, 0,-0.5,2,0, 50, 0,0,0,0)));
-       mgr->registerTool("STPick",
-                       ToolDefinition("tool_stonepick.png",
-                       ToolDiggingProperties(1.5, 0,-0.5,2,0, 100, 0,0,0,0)));
-       mgr->registerTool("SteelPick",
-                       ToolDefinition("tool_steelpick.png",
-                       ToolDiggingProperties(1.0, 0,-0.5,2,0, 300, 0,0,0,0)));
-       mgr->registerTool("MesePick",
-                       ToolDefinition("tool_mesepick.png",
-                       ToolDiggingProperties(0, 0,0,0,0, 1337, 0,0,0,0)));
-       mgr->registerTool("WShovel",
-                       ToolDefinition("tool_woodshovel.png",
-                       ToolDiggingProperties(2.0, 0.5,2,-1.5,0.3, 50, 0,0,0,0)));
-       mgr->registerTool("STShovel",
-                       ToolDefinition("tool_stoneshovel.png",
-                       ToolDiggingProperties(1.5, 0.5,2,-1.5,0.1, 100, 0,0,0,0)));
-       mgr->registerTool("SteelShovel",
-                       ToolDefinition("tool_steelshovel.png",
-                       ToolDiggingProperties(1.0, 0.5,2,-1.5,0.0, 300, 0,0,0,0)));
-       mgr->registerTool("WAxe",
-                       ToolDefinition("tool_woodaxe.png",
-                       ToolDiggingProperties(2.0, 0.5,-0.2,1,-0.5, 50, 0,0,0,0)));
-       mgr->registerTool("STAxe",
-                       ToolDefinition("tool_stoneaxe.png",
-                       ToolDiggingProperties(1.5, 0.5,-0.2,1,-0.5, 100, 0,0,0,0)));
-       mgr->registerTool("SteelAxe",
-                       ToolDefinition("tool_steelaxe.png",
-                       ToolDiggingProperties(1.0, 0.5,-0.2,1,-0.5, 300, 0,0,0,0)));
-       mgr->registerTool("WSword",
-                       ToolDefinition("tool_woodsword.png",
-                       ToolDiggingProperties(3.0, 3,0,1,-1, 50, 0,0,0,0)));
-       mgr->registerTool("STSword",
-                       ToolDefinition("tool_stonesword.png",
-                       ToolDiggingProperties(2.5, 3,0,1,-1, 100, 0,0,0,0)));
-       mgr->registerTool("SteelSword",
-                       ToolDefinition("tool_steelsword.png",
-                       ToolDiggingProperties(2.0, 3,0,1,-1, 300, 0,0,0,0)));
-       mgr->registerTool("",
-                       ToolDefinition("tooldef.hand.png",
-                       ToolDiggingProperties(0.5, 1,0,-1,0, 50, 0,0,0,0)));
-}
-
diff --git a/src/content_tool.h b/src/content_tool.h
deleted file mode 100644 (file)
index c7f14be..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
-Minetest-c55
-Copyright (C) 2011 celeron55, Perttu Ahola <celeron55@gmail.com>
-
-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 2 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, write to the Free Software Foundation, Inc.,
-51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-
-class IWritableToolDefManager;
-
-// Add default tools to manager
-void content_tool_init(IWritableToolDefManager *mgr);
-
index ae45e514613c9d199b79c6d39d64fc8e75668fd6..6c75863c01788f45c6dcce08fed5889807eb962d 100644 (file)
@@ -49,7 +49,6 @@ with this program; if not, write to the Free Software Foundation, Inc.,
 #include "main.h" // For g_settings
 #include "content_mapnode.h" // For content_mapnode_init
 #include "tooldef.h"
-#include "content_tool.h" // Default tools
 #include "content_mapnode.h" // Default nodes
 
 /*
@@ -646,8 +645,6 @@ void the_game(
 
        // Fill node feature table with default definitions
        content_mapnode_init(tsrc, nodedef);
-       // Set default tool definitions
-       content_tool_init(tooldef);
 
        /*
                Create server.
index 7b9a89f5799c343d02f4d83b86ab3dee429b558c..1bfe337ea430801220228a63048c610a801ad4c8 100644 (file)
@@ -35,6 +35,7 @@ extern "C" {
 //#include "luna.h"
 #include "luaentity_common.h"
 #include "content_sao.h" // For LuaEntitySAO
+#include "tooldef.h"
 
 /*
 TODO:
@@ -141,8 +142,8 @@ v3f readFloatPos(lua_State *L, int index)
 static int l_register_entity(lua_State *L)
 {
        const char *name = luaL_checkstring(L, 1);
-       luaL_checktype(L, 2, LUA_TTABLE);
        infostream<<"register_entity: "<<name<<std::endl;
+       luaL_checktype(L, 2, LUA_TTABLE);
 
        // Get minetest.registered_entities
        lua_getglobal(L, "minetest");
@@ -196,9 +197,99 @@ static int l_register_globalstep(lua_State *L)
        return 0; /* number of results */
 }
 
+#if 0
+// Clear all registered tools
+// deregister_tools()
+static int l_deregister_tools(lua_State *L)
+{
+       infostream<<"deregister_tools"<<std::endl;
+
+       // Get server from registry
+       lua_getfield(L, LUA_REGISTRYINDEX, "minetest_server");
+       Server *server = (Server*)lua_touserdata(L, -1);
+       // And get the writable tool definition manager from the server
+       IWritableToolDefManager *tooldef =
+                       server->getWritableToolDefManager();
+       
+       tooldef->clear();
+
+       return 0; /* number of results */
+}
+#endif
+
+// register_tool(name, {lots of stuff})
+static int l_register_tool(lua_State *L)
+{
+       const char *name = luaL_checkstring(L, 1);
+       infostream<<"register_tool: "<<name<<std::endl;
+       luaL_checktype(L, 2, LUA_TTABLE);
+
+       // Get server from registry
+       lua_getfield(L, LUA_REGISTRYINDEX, "minetest_server");
+       Server *server = (Server*)lua_touserdata(L, -1);
+       // And get the writable tool definition manager from the server
+       IWritableToolDefManager *tooldef =
+                       server->getWritableToolDefManager();
+       
+       int table = 2;
+       
+       ToolDefinition def;
+
+       lua_getfield(L, table, "image");
+       if(lua_isstring(L, -1))
+               def.imagename = lua_tostring(L, -1);
+       lua_pop(L, 1);
+       
+       lua_getfield(L, table, "basetime");
+       def.properties.basetime = lua_tonumber(L, -1);
+       lua_pop(L, 1);
+
+       lua_getfield(L, table, "dt_weight");
+       def.properties.dt_weight = lua_tonumber(L, -1);
+       lua_pop(L, 1);
+
+       lua_getfield(L, table, "dt_crackiness");
+       def.properties.dt_crackiness = lua_tonumber(L, -1);
+       lua_pop(L, 1);
+
+       lua_getfield(L, table, "dt_crumbliness");
+       def.properties.dt_crumbliness = lua_tonumber(L, -1);
+       lua_pop(L, 1);
+
+       lua_getfield(L, table, "dt_cuttability");
+       def.properties.dt_cuttability = lua_tonumber(L, -1);
+       lua_pop(L, 1);
+
+       lua_getfield(L, table, "basedurability");
+       def.properties.basedurability = lua_tonumber(L, -1);
+       lua_pop(L, 1);
+
+       lua_getfield(L, table, "dd_weight");
+       def.properties.dd_weight = lua_tonumber(L, -1);
+       lua_pop(L, 1);
+
+       lua_getfield(L, table, "dd_crackiness");
+       def.properties.dd_crackiness = lua_tonumber(L, -1);
+       lua_pop(L, 1);
+
+       lua_getfield(L, table, "dd_crumbliness");
+       def.properties.dd_crumbliness = lua_tonumber(L, -1);
+       lua_pop(L, 1);
+
+       lua_getfield(L, table, "dd_cuttability");
+       def.properties.dd_cuttability = lua_tonumber(L, -1);
+       lua_pop(L, 1);
+
+       tooldef->registerTool(name, def);
+
+       return 0; /* number of results */
+}
+
 static const struct luaL_Reg minetest_f [] = {
        {"register_entity", l_register_entity},
        {"register_globalstep", l_register_globalstep},
+       //{"deregister_tools", l_deregister_tools},
+       {"register_tool", l_register_tool},
        {NULL, NULL}
 };
 
@@ -581,6 +672,10 @@ void scriptapi_export(lua_State *L, Server *server)
        assert(lua_checkstack(L, 20));
        infostream<<"scriptapi_export"<<std::endl;
        StackUnroller stack_unroller(L);
+
+       // Store server as light userdata in registry
+       lua_pushlightuserdata(L, server);
+       lua_setfield(L, LUA_REGISTRYINDEX, "minetest_server");
        
        // Register global functions in table minetest
        lua_newtable(L);
index ca00ed29d8cf410d30b64e584a656c71ece6bbad..ee5e301f10364958f2bc191b4134f65c8f5b3f02 100644 (file)
@@ -43,7 +43,6 @@ with this program; if not, write to the Free Software Foundation, Inc.,
 #include "scriptapi.h"
 #include "nodedef.h"
 #include "tooldef.h"
-#include "content_tool.h" // For content_tool_init
 
 #define PP(x) "("<<(x).X<<","<<(x).Y<<","<<(x).Z<<")"
 
@@ -987,9 +986,6 @@ Server::Server(
 
        infostream<<"m_nodemgr="<<m_nodemgr<<std::endl;
        
-       // Initialize default tool definitions
-       content_tool_init(m_toolmgr);
-
        // Initialize default node definitions
        content_mapnode_init(NULL, m_nodemgr);
 
@@ -4240,6 +4236,15 @@ ITextureSource* Server::getTextureSource()
        return NULL;
 }
 
+IWritableToolDefManager* Server::getWritableToolDefManager()
+{
+       return m_toolmgr;
+}
+IWritableNodeDefManager* Server::getWritableNodeDefManager()
+{
+       return m_nodemgr;
+}
+
 v3f findSpawnPos(ServerMap &map)
 {
        //return v3f(50,50,50)*BS;
index 4b17887e8451daff601ed0b22189bdde8f143427..0354abbd9ca842a42107b486149dd442c14abd9a 100644 (file)
@@ -490,6 +490,9 @@ public:
        virtual IToolDefManager* getToolDefManager();
        virtual INodeDefManager* getNodeDefManager();
        virtual ITextureSource* getTextureSource();
+       
+       IWritableToolDefManager* getWritableToolDefManager();
+       IWritableNodeDefManager* getWritableNodeDefManager();
 
 private: