From 86e4972776c0274ad1ae1dcc47ede055eb2dbd97 Mon Sep 17 00:00:00 2001 From: tacigar Date: Thu, 15 Sep 2016 07:16:25 +0900 Subject: [PATCH 1/2] [ADD] Add core_writer method --- maidroid_tool/core_writer.lua | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/maidroid_tool/core_writer.lua b/maidroid_tool/core_writer.lua index 7c3a862..cf802f0 100644 --- a/maidroid_tool/core_writer.lua +++ b/maidroid_tool/core_writer.lua @@ -266,15 +266,31 @@ end) () paramtype2 = "facedir", }) + local function on_activate(self, staticdata) + self.object:set_properties{ + textures = {"maidroid_tool:core_node"}, + } + end + + local function start_rotate(self) + self.object:set_properties{ + automatic_rotate = 1, + } + end + + local function stop_rotate(self) + self.object:set_properties{ + automatic_rotate = 0, + } + end + minetest.register_entity("maidroid_tool:core_entity", { physical = false, visual = "wielditem", visual_size = {x = 0.5, y = 0.5}, collisionbox = {0, 0, 0, 0, 0, 0}, - on_activate = function(self, staticdata) - self.object:set_properties{textures = {"maidroid_tool:core_node"}} - end, + on_activate = on_activate, on_step = function(self, dtime) local yaw = self.object:getyaw() From 1b721472470161e7e94582f7e05d62ab16bf1ec0 Mon Sep 17 00:00:00 2001 From: tacigar Date: Thu, 15 Sep 2016 09:49:29 +0900 Subject: [PATCH 2/2] [UPDATE] Complete core writer --- maidroid_tool/core_writer.lua | 74 +++++++++++++++++++++++------------ 1 file changed, 50 insertions(+), 24 deletions(-) diff --git a/maidroid_tool/core_writer.lua b/maidroid_tool/core_writer.lua index cf802f0..7850c25 100644 --- a/maidroid_tool/core_writer.lua +++ b/maidroid_tool/core_writer.lua @@ -28,6 +28,17 @@ local dye_core_map = { }, } + -- get_nearest_core_entity returns the nearest core entity. + local function get_nearest_core_entity(pos) + local all_objects = minetest.get_objects_inside_radius(pos, 1.0) + for _, object in ipairs(all_objects) do + if object:get_luaentity().name == "maidroid_tool:core_entity" then + return object:get_luaentity() + end + end + return nil + end + -- can_dig is a common callback for the core writer. local function can_dig(pos, player) local meta = minetest.get_meta(pos) @@ -62,6 +73,9 @@ local dye_core_map = { meta:set_string("output_core", "") inventory:set_stack("core", 1, ItemStack(output_core)) minetest.swap_node(pos, {name = "maidroid_tool:core_writer"}) + + local core_entity = get_nearest_core_entity(pos) + core_entity:stop_rotate() end else -- else the core writer is inactive. @@ -80,6 +94,9 @@ local dye_core_map = { inventory:set_stack("dye", 1, dye_stack) minetest.swap_node(pos, {name = "maidroid_tool:core_writer_active"}) + + local core_entity = get_nearest_core_entity(pos) + core_entity:start_rotate() end end return true @@ -141,14 +158,32 @@ local dye_core_map = { inventory:set_size("dye", 1) end - local function on_metadata_inventory_put(pos) + local function on_metadata_inventory_put(pos, listname, index, stack, player) local timer = minetest.get_node_timer(pos) timer:start(1.0) + + local meta = minetest.get_meta(pos) + if listname == "core" then + local entity_position = { + x = pos.x, y = pos.y + 0.65, z = pos.z + } + local object = minetest.add_entity(entity_position, "maidroid_tool:core_entity") + end end - local function on_metadata_inventory_move(pos) - local timer = minetest.get_node_timer(pos) - timer:start(1.0) + local function on_metadata_inventory_move(pos, from_list, from_index, to_list, to_index, count, player) + local meta = minetest.get_meta(pos) + local inventory = meta:get_inventory() + local stack = inventory:get_stack(from_list, from_index) + + on_metadata_inventory_put(pos, listname, to_index, stack, player) + end + + local function on_metadata_inventory_take(pos, listname, index, stack, player) + if listname == "core" then + local core_entity = get_nearest_core_entity(pos) + core_entity.object:remove() + end end local function allow_metadata_inventory_take(pos, listname, index, stack, player) @@ -171,6 +206,7 @@ local dye_core_map = { on_construct = on_construct, on_metadata_inventory_put = on_metadata_inventory_put, on_metadata_inventory_move = on_metadata_inventory_move, + on_metadata_inventory_take = on_metadata_inventory_take, allow_metadata_inventory_put = allow_metadata_inventory_put, allow_metadata_inventory_move = allow_metadata_inventory_move, allow_metadata_inventory_take = allow_metadata_inventory_take, @@ -267,34 +303,24 @@ end) () }) local function on_activate(self, staticdata) - self.object:set_properties{ - textures = {"maidroid_tool:core_node"}, - } + self.object:set_properties{textures = {"maidroid_tool:core_node"}} end local function start_rotate(self) - self.object:set_properties{ - automatic_rotate = 1, - } + self.object:set_properties{automatic_rotate = 1} end local function stop_rotate(self) - self.object:set_properties{ - automatic_rotate = 0, - } + self.object:set_properties{automatic_rotate = 0} end minetest.register_entity("maidroid_tool:core_entity", { - physical = false, - visual = "wielditem", - visual_size = {x = 0.5, y = 0.5}, - collisionbox = {0, 0, 0, 0, 0, 0}, - - on_activate = on_activate, - - on_step = function(self, dtime) - local yaw = self.object:getyaw() - self.object:setyaw(yaw + 0.1) - end, + physical = false, + visual = "wielditem", + visual_size = {x = 0.5, y = 0.5}, + collisionbox = {0, 0, 0, 0, 0, 0}, + on_activate = on_activate, + start_rotate = start_rotate, + stop_rotate = stop_rotate, }) end) ()