From 13013b7aa24bd2379228ee8ee49b26729bd040e3 Mon Sep 17 00:00:00 2001 From: Hybrid Dog Date: Mon, 2 Jan 2017 15:26:04 +0100 Subject: [PATCH] Add a maidroid core for player made programs --- maidroid_core/cores/ocr.lua | 108 +++++++++++++++++++ maidroid_core/depends.txt | 1 + maidroid_core/init.lua | 3 + maidroid_core/sounds/maidroid_beep.ogg | Bin 0 -> 4970 bytes maidroid_core/textures/maidroid_core_ocr.png | Bin 0 -> 559 bytes maidroid_core/xcf/maidroid_core_ocr.xcf | Bin 0 -> 4525 bytes maidroid_tool/core_writer.lua | 1 + 7 files changed, 113 insertions(+) create mode 100644 maidroid_core/cores/ocr.lua create mode 100644 maidroid_core/sounds/maidroid_beep.ogg create mode 100644 maidroid_core/textures/maidroid_core_ocr.png create mode 100644 maidroid_core/xcf/maidroid_core_ocr.xcf diff --git a/maidroid_core/cores/ocr.lua b/maidroid_core/cores/ocr.lua new file mode 100644 index 0000000..ce22bc6 --- /dev/null +++ b/maidroid_core/cores/ocr.lua @@ -0,0 +1,108 @@ +------------------------------------------------------------ +-- Copyright (c) 2016 tacigar. All rights reserved. +-- https://github.com/tacigar/maidroid +------------------------------------------------------------ + +local maidroid_instruction_set = { + getpos = function(_, thread) + local pos = thread.droid.object:getpos() + return true, {pos.x, pos.y, pos.z} + end, + + beep = function(_, thread) + minetest.sound_play("maidroid_beep", {pos = thread.droid.object:getpos()}) + return true + end, + + getyaw = function(_, thread) + return true, thread.droid.object:getyaw() + end, + + setyaw = function(params, thread) + if #params ~= 1 then + return false, "wrong number of arguments" + end + local p = params[1] + if type(p) ~= "number" then + return false, "unsupported argument" + end + thread.droid.object:setyaw(p) + return true + end, +} + + +local function mylog(log) + -- This happens to the maidroids messages + minetest.chat_send_all("maidroid says " .. log) +end + +-- the program is loaded from a "default:book_written" with title "main" +-- if it's not present, following program is used in lieu: +local dummycode = [[ +beep +print $No book with title "main" found. +]] + +local function get_code(self) + local list = self:get_inventory():get_list"main" + for i = 1,#list do + local stack = list[i] + if stack:get_name() == "default:book_written" then + local data = minetest.deserialize(stack:get_metadata()) + if data + and data.title == "main" then + return data.text + end + end + end +end + +local function on_start(self) + self.object:setacceleration{x = 0, y = -10, z = 0} + self.object:setvelocity{x = 0, y = 0, z = 0} + + local parsed_code = pdisc.parse(get_code(self) or dummycode) + self.thread = pdisc.create_thread(function(thread) + thread.flush = function(self) + mylog(self.log) + self.log = "" + return true + end + table.insert(thread.is, 1, maidroid_instruction_set) + thread.droid = self + end, parsed_code) + self.thread:suscitate() +end + +local function on_step(self) + local thread = self.thread + if thread.stopped then + thread:try_rebirth() + end +end + +local function on_resume(self) + self.thread:continue() +end + +local function on_pause(self) + self.thread:flush() +end + +local function on_stop(self) + self.thread:exit() + + self.object:setvelocity{x = 0, y = 0, z = 0} +end + +-- register a definition of a new core. +maidroid.register_core("maidroid_core:ocr", { + description = "OCR programmable maidroid core", + inventory_image = "maidroid_core_ocr.png", + on_start = on_start, + on_stop = on_stop, + on_resume = on_resume, + on_pause = on_pause, + on_step = on_step, +}) diff --git a/maidroid_core/depends.txt b/maidroid_core/depends.txt index 2c64b95..d846d9e 100644 --- a/maidroid_core/depends.txt +++ b/maidroid_core/depends.txt @@ -1 +1,2 @@ maidroid +pdisc? diff --git a/maidroid_core/init.lua b/maidroid_core/init.lua index a8af579..7d16105 100644 --- a/maidroid_core/init.lua +++ b/maidroid_core/init.lua @@ -12,3 +12,6 @@ dofile(maidroid_core.modpath .. "/cores/_aux.lua") dofile(maidroid_core.modpath .. "/cores/empty.lua") dofile(maidroid_core.modpath .. "/cores/basic.lua") dofile(maidroid_core.modpath .. "/cores/farming.lua") +if pdisc then + dofile(maidroid_core.modpath .. "/cores/ocr.lua") +end diff --git a/maidroid_core/sounds/maidroid_beep.ogg b/maidroid_core/sounds/maidroid_beep.ogg new file mode 100644 index 0000000000000000000000000000000000000000..c89683602ef68a9edeafb6871bc7ba8fd291a82a GIT binary patch literal 4970 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 literal 0 HcmV?d00001 diff --git a/maidroid_core/xcf/maidroid_core_ocr.xcf b/maidroid_core/xcf/maidroid_core_ocr.xcf new file mode 100644 index 0000000000000000000000000000000000000000..459f886fc8ffd31fd9ddacd38ed602f9c2a5aae8 GIT binary patch literal 4525 zcmds4U1%It6h5=t$_FI6QvZAo!#w_pAEaKZHW)k z%^KQjo7gI>HH~x$mM!kmq_Iis?oQ$lq=6E#TBr~0LrGH#q7t=rcjtP}>|C8mRyVPs ze;4kYbI-kZ=6-YLJLim7>FAPnx;&CcX?Fv*8l#i`Aa+5(%R|`9Ug!g$j_qOWtFV_~ zUt{RB?h#zS31yWRZ(HZ`b#%BpgE$77T;1q*w*=j?v_lDQmo_!M{0hy~=u4H37O%U` z>sMs5;c5YD1HoPGZYkhvSLAh$T94P|Yxnu3T3yuny{#?M#wR!Gt$YrpJ&zjyM8y1%t~P#ler{ZAd&ihJY_<<+EHb+)GEHLw zv#Gh>K2=cdEca^`<;}>z^uOE}a@boJ!2ZgBJ+&m*`w4bi1MKdxz}}+69xe|1&|wZ6IPBNVu#XghJ+Z>D-&&ft zb=c_b1+f2zw+q33v45b|;_YWG-u4*Y-T)edO0cmC5LgaL>VPaVmDyPa7$a$;75D*? z6(tT9TkLoP>aD~ZPOJg};VGK8(FNPx5E$qTMl0E8DE#~w7)l1Mwvq&mm%)$~2n=)A zt$_i@mcTHVW!LY+z%Y9an#_R##~ijE7-qBVS~1x7U|_g%)qrgT1{`zPdSJMcWmk*A z{wEFGLST3k<3SbnO0Y9aO-8h?GUs`s1m|)R^*fd1dD6!tI9{bgVKZ^r(Uv!Ho1>e? zw}s0YO7iE0^Lj`{c{88pEf${WDd65GNnVFNFU;$(Q4(xS^A-!iCO#L1eeZC&5Nu@g zBG|;|qOezl%YGw0i-y!oU``FLva}jgBo=k_{^G$p<8cxLfCP$BdnnE%k$BO;S*s&3; z*uSNUeGn`5kytE&p*p1#d0*%d73|~ccXvm<&T*S7b~A1)*mc~df}L=8O~eb~9>&a! zxZ4^Av351%-a@#sVlRUG_HlWMxXl%N-rxU)8~wcick|w5`ui3Vvxq^X97>r86FLsf_siFF97hvOmmgSk!C!Li)AMDZoVb lTP~By<}__B-cDqHYN%43Ux804#iuydi}+7%XGp#^e*ya8WQYI& literal 0 HcmV?d00001 diff --git a/maidroid_tool/core_writer.lua b/maidroid_tool/core_writer.lua index 209ece5..876ab84 100644 --- a/maidroid_tool/core_writer.lua +++ b/maidroid_tool/core_writer.lua @@ -8,6 +8,7 @@ do -- register core writer local dye_item_map = { ["dye:red"] = "maidroid_core:basic", ["dye:yellow"] = "maidroid_core:farming", + ["dye:white"] = "maidroid_core:ocr", } local node_box = {