From f3282ad648838aa1316d3cd0ee3bb9493693d473 Mon Sep 17 00:00:00 2001 From: tacigar Date: Tue, 13 Sep 2016 10:59:18 +0900 Subject: [PATCH 1/8] [ADD] Add some files --- maidroid/api.lua | 114 ++++++++++++++++++++++++++++++++ maidroid/init.lua | 11 +++ maidroid/models/maidroid.b3d | Bin 0 -> 120300 bytes maidroid/models/maidroid.png | Bin 0 -> 971 bytes maidroid/staticdata-format.json | 4 ++ 5 files changed, 129 insertions(+) create mode 100644 maidroid/api.lua create mode 100644 maidroid/init.lua create mode 100644 maidroid/models/maidroid.b3d create mode 100644 maidroid/models/maidroid.png create mode 100644 maidroid/staticdata-format.json diff --git a/maidroid/api.lua b/maidroid/api.lua new file mode 100644 index 0000000..3d60c85 --- /dev/null +++ b/maidroid/api.lua @@ -0,0 +1,114 @@ +------------------------------------------------------------ +-- Copyright (c) 2016 tacigar +-- https://github.com/tacigar/maidroid +------------------------------------------------------------ + +-- maidroid.animation_frames represents the animation frame data +-- of "models/maidroid.b3d". +maidroid.animation_frames = { + STAND = {x = 0, y = 79}, + SIT = {x = 81, y = 160}, + LAY = {x = 162, y = 166}, + WALK = {x = 168, y = 187}, + MINE = {x = 189, y = 198}, + WALK_MINE = {x = 200, y = 219}, +} + +-- maidroid.get_inventory returns a inventory of a maidroid. +function maidroid.get_inventory(self) + return minetest.get_inventory { + type = "detached", + name = self.inventory_name, + } +end + +-- maidroid.register_maidroid registers a definition of a new maidroid. +function maidroid.register_maidroid(product_name, def) + + -- create_inventory creates a new inventory, and returns it. + function create_inventory(self) + self.inventory_name = self.product_name .. tostring(self.manufacturing_number) + + local inventory = minetest.create_detached_inventory(self.inventory_name, { + on_put = function(inv, listname, index, stack, player) + + end, + + allow_put = function(inv, listname, index, stack, player) + + end, + + on_take = function(inv, listname, index, stack, player) + + end, + }) + inventory:set_size("main", 16) + inventory:set_size("core", 1) + + return inventory + end + + -- create_formspec_string returns a string that represents a formspec definition. + function create_formspec_string(self) + return "size[8,9]" + .. "list[detached:"..self.inventory_name..";main;0,0;4,4;]" + .. "label[5,0;core]" + .. "list[detached:"..self.inventory_name..";core;6,0;1,1;]" + .. "list[current_player;main;0,5;8,1;]" + .. "list[current_player;main;0,6.2;8,3;8]" + end + + -- on_activate is a callback function that is called when the object is created or recreated. + function on_activate(self, staticdata) + if staticdata == "" then + self.product_name = product_name + create_inventory(self) + else + -- if static data is not empty string, this object has beed already created. + local data = minetest.deserialize(staticdata) + + self.product_name = data["product_name"] + self.manufacturing_number = data["manufacturing_number"] + + local inventory = create_inventory(self) + + if data["inventory"]["module"] ~= "" then + + end + + end + + self.formspec_string = create_formspec_string(self) + end + + -- get_staticdata is a callback function that is called when the object is destroyed. + function get_staticdata = function(self) + local inventory = maidroid.get_inventory(self) + local data = { + ["product_name"] = self.product_name, + ["manufacturing_number"] = self.manufacturing_number, + ["inventory"] = { + ["main"] = {}, + ["core"] = core_name, -- TODO + }, + } + + for _, item in ipairs(inventory:get_list("main")) do + local count = item:get_count() + local itemname = item:get_name() + if count ~= 0 then + local itemdata = {count = count, name = itemname} + table.insert(data["inventory"]["main"], itemdata) + end + end + return minetest.serialize(data) + end + + -- register a definition of a new maidroid. + minetest.register_entity(product_name, { + product_name = "", + manufacturing_number = -1, + + on_activate = on_activate, + }) +end diff --git a/maidroid/init.lua b/maidroid/init.lua new file mode 100644 index 0000000..65b2e54 --- /dev/null +++ b/maidroid/init.lua @@ -0,0 +1,11 @@ +------------------------------------------------------------ +-- Copyright (c) 2016 tacigar +-- https://github.com/tacigar/maidroid +------------------------------------------------------------ + +maidroid = {} + +maidroid.modname = "maidroid" +maidroid.modpath = maidroid.get_modpath(maidroid.modname) + +dofile(maidroid.modpath .. "/api.lua") diff --git a/maidroid/models/maidroid.b3d b/maidroid/models/maidroid.b3d new file mode 100644 index 0000000000000000000000000000000000000000..76243badfc9afdfa68b13c141f511f44ae3cfe31 GIT binary patch literal 120300 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 S>$f5L{QE-!E5CZ;xcxtD{tY_- literal 0 HcmV?d00001 diff --git a/maidroid/models/maidroid.png b/maidroid/models/maidroid.png new file mode 100644 index 0000000000000000000000000000000000000000..d9c5f774deb642223343d2f67d6abb24dc313201 GIT binary patch literal 971 zcmV;+12p`JP)A0S|v7OwyR16WB! zK~z}7)mS}j(?A$~b}fY3ZXneIWFstD8X?hE2&qlPP>ED-M~WaDNUR{17KuuTpDavt zOMxI364O*LB@76~AXR0_P@1hUn2Juo*qFgR_k20qcTW1llOn~RefIPB`_9VFM#BMs zzT_B=BD8~k;N>g#0RV6BWqtO(pBP76c|3;c@58V z#4%Aety-E3C9t;Xgq}|)=0ndLh7qec2$X@L5hv=R?1i&jd+pOV+&bS1UHhQ05-S>{ z2(^jqWaPqYGbw(nINk()KRw(&n4d{?go(zNCHZ0q!lmI8ln1xP2-4(i+f8;|*S&LL z zWSXWgj5JZpvZP0sEEJ*#qh{|xV71=p7@6u}5|VB+`$2YX({a;edfH8yN(F{tU{LqB zpT9ppbA`tLAz0&hj^sY-JQwzlaYolpW7is(fGdY0?D?#=BeAsu7+fafB(m zX=jN=^*{j7!t#$5tNEFfv=>F&Px9FI-bRb6XjQ}uB;gIiK(#a{^yWR&gOy6fVZ&#d zruX(gKF)W!Z&m`YNhcJXy6BF;l~?oJ&vPm-xAtQrlujtVpR^tfOXyyZV-*mweW<+$ z01OO`cvFSm>!|EksIWc8YP}(?W_WWu>>llwJ4|}m0QH? zVhy+RS@96Z{eCBcOeTY^^(@+O32v>w05Z>oX0sMl7&84%1oc`C Date: Tue, 13 Sep 2016 12:44:26 +0900 Subject: [PATCH 2/8] [Add] Add lines --- maidroid/api.lua | 120 ++++++++++++++++++++++++++++++-- maidroid/staticdata-format.json | 4 -- 2 files changed, 113 insertions(+), 11 deletions(-) delete mode 100644 maidroid/staticdata-format.json diff --git a/maidroid/api.lua b/maidroid/api.lua index 3d60c85..8ad79d2 100644 --- a/maidroid/api.lua +++ b/maidroid/api.lua @@ -14,6 +14,22 @@ maidroid.animation_frames = { WALK_MINE = {x = 200, y = 219}, } +-- maidroid.registered_maidroids represents a table that contains +-- definitions of maidroid registered by maidroid.register_maidroid. +maidroid.registered_maidroids = {} + +-- maidroid.registered_cores represents a table that contains +-- definitions of core registered by maidroid.register_core. +maidroid.registered_cores = {} + +-- maidroid.is_core reports whether a item is a core item by the name. +function maidroid.is_core(item_name) + if maidroid.registered_cores[item_name] then + return true + end + return false +end + -- maidroid.get_inventory returns a inventory of a maidroid. function maidroid.get_inventory(self) return minetest.get_inventory { @@ -22,6 +38,25 @@ function maidroid.get_inventory(self) } end +-- maidroid.get_core_name returns a name of a maidroid's current core. +function maidroid.get_core_name(self) + local inventory = maidroid.get_inventory(self) + local list = inventory:get_list("core")[1] + if list ~= nil then + return list:get_name() + end + return "" +end + +-- maidroid.get_core returns a maidroid's current core definition. +function maidroid.get_core(self) + local name = maidroid.get_core_name(self) + if name ~= "" then + return maidroid.registered_cores[name] + end + return nil +end + -- maidroid.register_maidroid registers a definition of a new maidroid. function maidroid.register_maidroid(product_name, def) @@ -31,15 +66,32 @@ function maidroid.register_maidroid(product_name, def) local inventory = minetest.create_detached_inventory(self.inventory_name, { on_put = function(inv, listname, index, stack, player) + if listname == "core" then + local core_name = stack:get_name() + local core = registered_cores[core_name] + core.initialize(self) + self.core_name = core_name + end end, allow_put = function(inv, listname, index, stack, player) - + -- only cores can put to a core inventory. + if listname == "main" then + return stack:get_count() + elseif listname == "core" and maidroid.is_core(stack:get_name()) then + return stack:get_count() + end + return 0 end, on_take = function(inv, listname, index, stack, player) + if listname == "core" then + local core = registered_cores[self.core_name] + self.core_name = "" + core.finalize(self) + end end, }) inventory:set_size("main", 16) @@ -72,7 +124,7 @@ function maidroid.register_maidroid(product_name, def) local inventory = create_inventory(self) - if data["inventory"]["module"] ~= "" then + if data["inventory"]["core"] ~= "" then end @@ -82,14 +134,14 @@ function maidroid.register_maidroid(product_name, def) end -- get_staticdata is a callback function that is called when the object is destroyed. - function get_staticdata = function(self) + function get_staticdata(self) local inventory = maidroid.get_inventory(self) local data = { ["product_name"] = self.product_name, ["manufacturing_number"] = self.manufacturing_number, ["inventory"] = { ["main"] = {}, - ["core"] = core_name, -- TODO + ["core"] = self.core_name, }, } @@ -104,11 +156,65 @@ function maidroid.register_maidroid(product_name, def) return minetest.serialize(data) end + -- on_step is a callback function that is called every delta times. + function on_step(self, dtime) + if (not self.pause) and self.core_name ~= "" then + local core = registered_cores[self.core_name] + core.on_step(self, dtime) + end + end + + -- on_rightclick is a callback function that is called when a player right-click them. + function on_rightclick(self, clicker) + minetest.show_formspec( + clicker:get_player_name(), + self.inventory_name, + self.formspec_string, + ) + end + + -- on_punch is a callback function that is called when a player punch then. + function on_punch(self, puncher, time_from_last_punch, tool_capabilities, dir) + if self.pause == true then + self.pause = false + if self.core_name ~= "" then + local core = registered_cores[self.core_name] + core.on_pause(self) + end + else + self.pause = true + if self.core_name ~= "" then + local core = registered_cores[self.core_name] + core.on_resume(self) + end + end + end + -- register a definition of a new maidroid. minetest.register_entity(product_name, { - product_name = "", - manufacturing_number = -1, + -- basic initial properties + hp_max = def.hp_max, + weight = def.weight, + mesh = def.mesh, + textures = def.textures, - on_activate = on_activate, + physical = true, + visual = "mesh", + visual_size = {x = 10, y = 10}, + is_visible = true, + makes_footstep_sound = true, + + -- extra initial properties + pause = false, + product_name = "", + manufacturing_number = -1, + core_name = "", + + -- callback methods. + on_activate = on_activate, + on_step = on_step, + on_rightclick = on_rightclick, + on_punch = on_punch, + get_staticdata = get_staticdata, }) end diff --git a/maidroid/staticdata-format.json b/maidroid/staticdata-format.json deleted file mode 100644 index bc854bf..0000000 --- a/maidroid/staticdata-format.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "product_name" : "maidroid_mk2", - "serial_number" : 831, -} From e93d43f5cbbbae7be4ef9e334e7f22c89d645727 Mon Sep 17 00:00:00 2001 From: tacigar Date: Tue, 13 Sep 2016 14:51:23 +0900 Subject: [PATCH 3/8] [ADD] Add some files, and commit before brush up APIs --- maidroid/api.lua | 13 +++++++-- maidroid/init.lua | 1 + .../models/{maidroid.png => maidroid_mk1.png} | Bin maidroid/models/maidroid_mk2.png | Bin 0 -> 1005 bytes maidroid/models/maidroid_mk3.png | Bin 0 -> 990 bytes maidroid/register.lua | 25 ++++++++++++++++++ 6 files changed, 37 insertions(+), 2 deletions(-) rename maidroid/models/{maidroid.png => maidroid_mk1.png} (100%) create mode 100644 maidroid/models/maidroid_mk2.png create mode 100644 maidroid/models/maidroid_mk3.png create mode 100644 maidroid/register.lua diff --git a/maidroid/api.lua b/maidroid/api.lua index 8ad79d2..4d218e5 100644 --- a/maidroid/api.lua +++ b/maidroid/api.lua @@ -57,6 +57,17 @@ function maidroid.get_core(self) return nil end +-- maidroid.register_core registers a definition of a new core. +function maidroid.register_core(core_name, def) + maidroid.registered_cores[core_name] = def + + minetest.register_craftitem(core_name, { + stack_max = 1, + description = def.description, + inventory_image = def.inventory_image, + }) +end + -- maidroid.register_maidroid registers a definition of a new maidroid. function maidroid.register_maidroid(product_name, def) @@ -69,7 +80,6 @@ function maidroid.register_maidroid(product_name, def) if listname == "core" then local core_name = stack:get_name() local core = registered_cores[core_name] - core.initialize(self) self.core_name = core_name end @@ -88,7 +98,6 @@ function maidroid.register_maidroid(product_name, def) on_take = function(inv, listname, index, stack, player) if listname == "core" then local core = registered_cores[self.core_name] - self.core_name = "" core.finalize(self) end diff --git a/maidroid/init.lua b/maidroid/init.lua index 65b2e54..7cd0eb1 100644 --- a/maidroid/init.lua +++ b/maidroid/init.lua @@ -9,3 +9,4 @@ maidroid.modname = "maidroid" maidroid.modpath = maidroid.get_modpath(maidroid.modname) dofile(maidroid.modpath .. "/api.lua") +dofile(maidroid.modpath .. "/register.lua") diff --git a/maidroid/models/maidroid.png b/maidroid/models/maidroid_mk1.png similarity index 100% rename from maidroid/models/maidroid.png rename to maidroid/models/maidroid_mk1.png diff --git a/maidroid/models/maidroid_mk2.png b/maidroid/models/maidroid_mk2.png new file mode 100644 index 0000000000000000000000000000000000000000..97690e101dd7ec8bd203eabad23d58dd24b328f2 GIT binary patch literal 1005 zcmV|~z8DG|GDhg|Srm)S_9e@AyZtZ#h#_RY+j*)i>Rn)%JY?|r|2-<#0x z#)=65Ohil+SQ4_?3Z5CHIIB30vW>gdMq#!8(pj3aIb&Y)?ULVu;CdjrVROYLG( zoSUD%$^q0gt>(Nxrg~#Ae6GvWig**{4Q~|GT+#3z;=Z9tVbaPbyI-TkxcM5+K|TdK z&(z-|VvZ8y=2PZ#V~zmUw@k7ReZXX;OjMasSwT~I^#b9SwJ5MnTZp#5=!5Kz1 z*;Q4wt~r4ZjKPt;5Khk)Av&kvC@?Sfp#OB^04WO;5P!~s<5~3E;6?U$?z?sTBox{Q zNXHRnjvY^$rqzUz1*+@1=h5ZWLR1f06?^Gypda{rLVf{j?^fzYW;kd-2ij&10_^&h zSxu9HfojSW3Lu1_RjqA5f65<(LgW7stbUlAS>2Rky>DpJDn8bieSW{jH?YTW!)k^C zleI-H17H}_RG!TiEg#!C4o&jsb5nxxIc4=&b{GT#kPWE}o9WS~LO(B3SY^(t8dreX zoruHL2(mjstJ;M`s<%#9XqpCX)P2$OxiQ;`$UZlp(a#dBWx$S0sLzA#m_ELIKCYf1~)3Ze@+>~KD-)Rc)`wu(S<4F(7 zf~5BnLh69<@1O**!k1Mw(v!rGFy%MxJTSK&2mp#x{_$dUWH9ELMcMY#acp~kqs3Ho zScV0f@PrV|=fxB8gP)>V{nbl3tYDP4- zo!(I?=`~|d@$zD^&plMb`6AjAH}P$G4gk=e=*R2)D`alO8F0AW#a1X(aMtDC5lbo4}FiL4+X^ah+NMh8`SW!YE zbh0ZDjm2SQ_F`g`gloJ@EVS7|Dh*fNjm0s`?A+|`%(5u{WRjh~v%7EK{6GKAXsxPimByINyn5kPm^8!R|34 z<|r|7zRdReLL`9C-$~^C(V@l2`<7)TN)BpTpD{+_22EYNB=lE4e8s)1jmT%8EbkmwH!1`p%_vfwSoQ?k(6Ot-)UXv_a9-Z zM@bLLf}~?D%jyEczk?FM3SU;$NLP|1!j#{%^T6WPzz%~E@yCnR`I)>ji(z()OP<`h zgX4`BqcL?E7HGg*mWA#01*tzzO%K|(P59|^9LN9r?T!2K>ty5?n&D%#CQ7r*fl9(3 z&*`GrI+cx()(ke)ZD&+Krvi>wKu5m!mA3$ZK4UCURp?$PqjCx*E3x84MpO;wH(|QW zi)oAUMcHn}#XzC#_Xi4P>{eX$lZ7PbcQRHi7SYP?1NhcCQ_Sw8STq1MV{3CJEHPBp zI~jYmQUlP-TpO|V831%qa-^9s?fM?tjVdOGj<=taL%nD>s!}2H2PhNXDXw5QcK`qY M07*qoM6N<$g5H(TyZ`_I literal 0 HcmV?d00001 diff --git a/maidroid/register.lua b/maidroid/register.lua new file mode 100644 index 0000000..236cbda --- /dev/null +++ b/maidroid/register.lua @@ -0,0 +1,25 @@ +------------------------------------------------------------ +-- Copyright (c) 2016 tacigar +-- https://github.com/tacigar/maidroid +------------------------------------------------------------ + +maidroid.register_maidroid("maidroid:maidroid_mk1", { + hp_max = 10, + weight = 20, + mesh = "maidroid.b3d", + textures = "maidroid_mk1.png", +}) + +maidroid.register_maidroid("maidroid:maidroid_mk2", { + hp_max = 10, + weight = 20, + mesh = "maidroid.b3d", + textures = "maidroid_mk2.png", +}) + +maidroid.register_maidroid("maidroid:maidroid_mk3", { + hp_max = 10, + weight = 20, + mesh = "maidroid.b3d", + textures = "maidroid_mk3.png", +}) From ab54cef3cd5148bb16d1d6b81da55413ff724ecd Mon Sep 17 00:00:00 2001 From: tacigar Date: Tue, 13 Sep 2016 16:09:44 +0900 Subject: [PATCH 4/8] [UPDATE] Updates maidroid method APIs --- maidroid/api.lua | 51 ++++++++++++++++++++++++++++++++++------------- maidroid/init.lua | 2 +- modpack.txt | 0 3 files changed, 38 insertions(+), 15 deletions(-) create mode 100644 modpack.txt diff --git a/maidroid/api.lua b/maidroid/api.lua index 4d218e5..3cd443d 100644 --- a/maidroid/api.lua +++ b/maidroid/api.lua @@ -30,33 +30,38 @@ function maidroid.is_core(item_name) return false end --- maidroid.get_inventory returns a inventory of a maidroid. -function maidroid.get_inventory(self) +--------------------------------------------------------------------- + +-- maidroid.maidroid represents a table that contains common methods +-- for maidroid object. +-- this table must be a metatable of maidroid self tables. +maidroid.maidroid = {} +maidroid.maidroid.__index = maidroid + +-- maidroid.maidroid.get_inventory returns a inventory of a maidroid. +function maidroid.maidroid.get_inventory(self) return minetest.get_inventory { type = "detached", name = self.inventory_name, } end --- maidroid.get_core_name returns a name of a maidroid's current core. -function maidroid.get_core_name(self) - local inventory = maidroid.get_inventory(self) - local list = inventory:get_list("core")[1] - if list ~= nil then - return list:get_name() - end - return "" +-- maidroid.maidroid.get_core_name returns a name of a maidroid's current core. +function maidroid.maidroid.get_core_name(self) + return self.core_name end --- maidroid.get_core returns a maidroid's current core definition. -function maidroid.get_core(self) - local name = maidroid.get_core_name(self) +-- maidroid.maidroid.get_core returns a maidroid's current core definition. +function maidroid.maidroid.get_core(self) + local name = self:get_core_name(self) if name ~= "" then return maidroid.registered_cores[name] end return nil end +--------------------------------------------------------------------- + -- maidroid.register_core registers a definition of a new core. function maidroid.register_core(core_name, def) maidroid.registered_cores[core_name] = def @@ -121,6 +126,11 @@ function maidroid.register_maidroid(product_name, def) -- on_activate is a callback function that is called when the object is created or recreated. function on_activate(self, staticdata) + -- first, set maidroid metatable to self table. + if getmetatable(self) == nil then + setmetatable(self, maidroid.maidroid) + end + if staticdata == "" then self.product_name = product_name create_inventory(self) @@ -178,7 +188,7 @@ function maidroid.register_maidroid(product_name, def) minetest.show_formspec( clicker:get_player_name(), self.inventory_name, - self.formspec_string, + self.formspec_string ) end @@ -226,4 +236,17 @@ function maidroid.register_maidroid(product_name, def) on_punch = on_punch, get_staticdata = get_staticdata, }) + + minetest.register_craftitem(product_name .. "_spawner", { + description = " Spawner", + inventory_image = def.inventory_image, + stack_max = 1, + on_use = function(item_stack, user, pointed_thing) + if pointed_thing.above ~= nil then + minetest.add_entity(pointed_thing.above, product_name) + return itemstack + end + return nil + end, + }) end diff --git a/maidroid/init.lua b/maidroid/init.lua index 7cd0eb1..1450495 100644 --- a/maidroid/init.lua +++ b/maidroid/init.lua @@ -6,7 +6,7 @@ maidroid = {} maidroid.modname = "maidroid" -maidroid.modpath = maidroid.get_modpath(maidroid.modname) +maidroid.modpath = minetest.get_modpath(maidroid.modname) dofile(maidroid.modpath .. "/api.lua") dofile(maidroid.modpath .. "/register.lua") diff --git a/modpack.txt b/modpack.txt new file mode 100644 index 0000000..e69de29 From d124511e0f60a0f6defdc8309d71edc5312517ed Mon Sep 17 00:00:00 2001 From: tacigar Date: Tue, 13 Sep 2016 16:21:33 +0900 Subject: [PATCH 5/8] [UPDATE] Update on_activate --- maidroid/api.lua | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/maidroid/api.lua b/maidroid/api.lua index 3cd443d..a3dec53 100644 --- a/maidroid/api.lua +++ b/maidroid/api.lua @@ -131,8 +131,10 @@ function maidroid.register_maidroid(product_name, def) setmetatable(self, maidroid.maidroid) end + -- second, parse the staticdata, and compose a inventory. if staticdata == "" then self.product_name = product_name + self.manufacturing_number = 0 create_inventory(self) else -- if static data is not empty string, this object has beed already created. @@ -142,11 +144,21 @@ function maidroid.register_maidroid(product_name, def) self.manufacturing_number = data["manufacturing_number"] local inventory = create_inventory(self) + local core_name = data["inventory"]["core"] + local items = data["inventory"]["main"] - if data["inventory"]["core"] ~= "" then - + if core_name ~= "" then -- set a core + core_stack = ItemStack(core_name) + core_stack:set_count(1) + inventory:add_item("core", core_stack) + self.core_name = core_name end + for _, item in ipairs(items) do -- set items + local item_stack = ItemStack(item["name"]) + item_stack:set_count(item["count"]) + inventory:add_item("main", item_stack) + end end self.formspec_string = create_formspec_string(self) From 806c3be15d4781e7fe99bd955e4c51e3059adb33 Mon Sep 17 00:00:00 2001 From: tacigar Date: Tue, 13 Sep 2016 16:55:29 +0900 Subject: [PATCH 6/8] [UPDATE] Update method APIs --- maidroid/api.lua | 22 +++++++++++----------- maidroid/register.lua | 6 +++--- 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/maidroid/api.lua b/maidroid/api.lua index a3dec53..9abc37b 100644 --- a/maidroid/api.lua +++ b/maidroid/api.lua @@ -34,9 +34,10 @@ end -- maidroid.maidroid represents a table that contains common methods -- for maidroid object. --- this table must be a metatable of maidroid self tables. +-- this table must be contains by a metatable.__index of maidroid self tables. +-- minetest.register_entity set initial properties as metatable, so +-- thie table's methods will be put there. maidroid.maidroid = {} -maidroid.maidroid.__index = maidroid -- maidroid.maidroid.get_inventory returns a inventory of a maidroid. function maidroid.maidroid.get_inventory(self) @@ -79,7 +80,6 @@ function maidroid.register_maidroid(product_name, def) -- create_inventory creates a new inventory, and returns it. function create_inventory(self) self.inventory_name = self.product_name .. tostring(self.manufacturing_number) - local inventory = minetest.create_detached_inventory(self.inventory_name, { on_put = function(inv, listname, index, stack, player) if listname == "core" then @@ -126,12 +126,7 @@ function maidroid.register_maidroid(product_name, def) -- on_activate is a callback function that is called when the object is created or recreated. function on_activate(self, staticdata) - -- first, set maidroid metatable to self table. - if getmetatable(self) == nil then - setmetatable(self, maidroid.maidroid) - end - - -- second, parse the staticdata, and compose a inventory. + -- parse the staticdata, and compose a inventory. if staticdata == "" then self.product_name = product_name self.manufacturing_number = 0 @@ -166,7 +161,7 @@ function maidroid.register_maidroid(product_name, def) -- get_staticdata is a callback function that is called when the object is destroyed. function get_staticdata(self) - local inventory = maidroid.get_inventory(self) + local inventory = self:get_inventory() local data = { ["product_name"] = self.product_name, ["manufacturing_number"] = self.manufacturing_number, @@ -247,10 +242,15 @@ function maidroid.register_maidroid(product_name, def) on_rightclick = on_rightclick, on_punch = on_punch, get_staticdata = get_staticdata, + + -- extra methods. + get_inventory = maidroid.maidroid.get_inventory, + get_core = maidroid.maidroid.get_core, + get_core_name = maidroid.maidroid.get_core_name, }) minetest.register_craftitem(product_name .. "_spawner", { - description = " Spawner", + description = product_name .. " spawner", inventory_image = def.inventory_image, stack_max = 1, on_use = function(item_stack, user, pointed_thing) diff --git a/maidroid/register.lua b/maidroid/register.lua index 236cbda..4ded476 100644 --- a/maidroid/register.lua +++ b/maidroid/register.lua @@ -7,19 +7,19 @@ maidroid.register_maidroid("maidroid:maidroid_mk1", { hp_max = 10, weight = 20, mesh = "maidroid.b3d", - textures = "maidroid_mk1.png", + textures = {"maidroid_mk1.png"}, }) maidroid.register_maidroid("maidroid:maidroid_mk2", { hp_max = 10, weight = 20, mesh = "maidroid.b3d", - textures = "maidroid_mk2.png", + textures = {"maidroid_mk2.png"}, }) maidroid.register_maidroid("maidroid:maidroid_mk3", { hp_max = 10, weight = 20, mesh = "maidroid.b3d", - textures = "maidroid_mk3.png", + textures = {"maidroid_mk3.png"}, }) From 9b5924f29993d4061cad726e3289eb9cc200008d Mon Sep 17 00:00:00 2001 From: tacigar Date: Tue, 13 Sep 2016 17:22:54 +0900 Subject: [PATCH 7/8] [ADD] Add manufacturing data, and commit before debug --- maidroid/api.lua | 33 ++++++++++++++++++++++++++++++--- 1 file changed, 30 insertions(+), 3 deletions(-) diff --git a/maidroid/api.lua b/maidroid/api.lua index 9abc37b..a4e9de9 100644 --- a/maidroid/api.lua +++ b/maidroid/api.lua @@ -35,8 +35,8 @@ end -- maidroid.maidroid represents a table that contains common methods -- for maidroid object. -- this table must be contains by a metatable.__index of maidroid self tables. --- minetest.register_entity set initial properties as metatable, so --- thie table's methods will be put there. +-- minetest.register_entity set initial properties as a metatable.__index, so +-- this table's methods must be put there. maidroid.maidroid = {} -- maidroid.maidroid.get_inventory returns a inventory of a maidroid. @@ -63,6 +63,29 @@ end --------------------------------------------------------------------- +-- maidroid.manufacturing_data represents a table that contains manufacturing data. +-- this table's keys are product names, and values are manufacturing numbers +-- that has been already manufactured. +maidroid.manufacturing_data = (function() + local file_name = minetest.get_worldpath() .. "/manufacturing_data" + + minetest.register_on_shutdown(function() + local file = io.open(file_name, "w") + file:write(minetest.serialize(maidroid.manufacturing_data)) + file:close() + end) + + local file = io.open(file_name) + if file ~= nil then + local data = file:read("*a") + file:close() + return minetest.deserialize(data) + end + return {} +end) () + +--------------------------------------------------------------------- + -- maidroid.register_core registers a definition of a new core. function maidroid.register_core(core_name, def) maidroid.registered_cores[core_name] = def @@ -76,6 +99,8 @@ end -- maidroid.register_maidroid registers a definition of a new maidroid. function maidroid.register_maidroid(product_name, def) + -- initialize manufacturing number of a new maidroid. + maidroid.manufacturing_data[product_name] = 0 -- create_inventory creates a new inventory, and returns it. function create_inventory(self) @@ -129,7 +154,8 @@ function maidroid.register_maidroid(product_name, def) -- parse the staticdata, and compose a inventory. if staticdata == "" then self.product_name = product_name - self.manufacturing_number = 0 + self.manufacturing_number = maidroid.manufacturing_data[product_name] + maidroid.manufacturing_data[product_name] = maidroid.manufacturing_data[product_name] + 1 create_inventory(self) else -- if static data is not empty string, this object has beed already created. @@ -201,6 +227,7 @@ function maidroid.register_maidroid(product_name, def) -- on_punch is a callback function that is called when a player punch then. function on_punch(self, puncher, time_from_last_punch, tool_capabilities, dir) + print(self.product_name .. tostring(self.manufacturing_number)) if self.pause == true then self.pause = false if self.core_name ~= "" then From 349837d5f1a5d30d60ed9f4e219b11c44abe8b25 Mon Sep 17 00:00:00 2001 From: tacigar Date: Tue, 13 Sep 2016 17:38:30 +0900 Subject: [PATCH 8/8] [FIX] Fix manufacturing data --- maidroid/api.lua | 36 +++++++++++++++++++++--------------- maidroid/init.lua | 2 +- maidroid/register.lua | 2 +- 3 files changed, 23 insertions(+), 17 deletions(-) diff --git a/maidroid/api.lua b/maidroid/api.lua index a4e9de9..ef93199 100644 --- a/maidroid/api.lua +++ b/maidroid/api.lua @@ -1,5 +1,5 @@ ------------------------------------------------------------ --- Copyright (c) 2016 tacigar +-- Copyright (c) 2016 tacigar. All rights reserved. -- https://github.com/tacigar/maidroid ------------------------------------------------------------ @@ -75,7 +75,7 @@ maidroid.manufacturing_data = (function() file:close() end) - local file = io.open(file_name) + local file = io.open(file_name, "r") if file ~= nil then local data = file:read("*a") file:close() @@ -100,7 +100,9 @@ end -- maidroid.register_maidroid registers a definition of a new maidroid. function maidroid.register_maidroid(product_name, def) -- initialize manufacturing number of a new maidroid. - maidroid.manufacturing_data[product_name] = 0 + if maidroid.manufacturing_data[product_name] == nil then + maidroid.manufacturing_data[product_name] = 0 + end -- create_inventory creates a new inventory, and returns it. function create_inventory(self) @@ -155,6 +157,7 @@ function maidroid.register_maidroid(product_name, def) if staticdata == "" then self.product_name = product_name self.manufacturing_number = maidroid.manufacturing_data[product_name] + print(self.manufacturing_number, "KOKO") maidroid.manufacturing_data[product_name] = maidroid.manufacturing_data[product_name] + 1 create_inventory(self) else @@ -276,16 +279,19 @@ function maidroid.register_maidroid(product_name, def) get_core_name = maidroid.maidroid.get_core_name, }) - minetest.register_craftitem(product_name .. "_spawner", { - description = product_name .. " spawner", - inventory_image = def.inventory_image, - stack_max = 1, - on_use = function(item_stack, user, pointed_thing) - if pointed_thing.above ~= nil then - minetest.add_entity(pointed_thing.above, product_name) - return itemstack - end - return nil - end, - }) + -- register a spawner for debugging maidroid mods. + if maidroid.debug_mode then + minetest.register_craftitem(product_name .. "_spawner", { + description = product_name .. " spawner", + inventory_image = "maidroid_debug_spawner.png", + stack_max = 1, + on_use = function(item_stack, user, pointed_thing) + if pointed_thing.above ~= nil then + minetest.add_entity(pointed_thing.above, product_name) + return itemstack + end + return nil + end, + }) + end end diff --git a/maidroid/init.lua b/maidroid/init.lua index 1450495..0252422 100644 --- a/maidroid/init.lua +++ b/maidroid/init.lua @@ -1,5 +1,5 @@ ------------------------------------------------------------ --- Copyright (c) 2016 tacigar +-- Copyright (c) 2016 tacigar. All rights reserved. -- https://github.com/tacigar/maidroid ------------------------------------------------------------ diff --git a/maidroid/register.lua b/maidroid/register.lua index 4ded476..6ef36d8 100644 --- a/maidroid/register.lua +++ b/maidroid/register.lua @@ -1,5 +1,5 @@ ------------------------------------------------------------ --- Copyright (c) 2016 tacigar +-- Copyright (c) 2016 tacigar. All rights reserved. -- https://github.com/tacigar/maidroid ------------------------------------------------------------