diff options
| -rw-r--r-- | .luacheckrc | 6 | ||||
| -rw-r--r-- | LICENSE | 22 | ||||
| -rw-r--r-- | README | 13 | ||||
| -rw-r--r-- | init.lua | 89 | ||||
| -rw-r--r-- | mod.conf | 5 | ||||
| -rw-r--r-- | textures/advtouchscreen_front.png | bin | 0 -> 634 bytes | |||
| -rw-r--r-- | textures/advtouchscreen_sides.png | bin | 0 -> 5863 bytes | 
7 files changed, 135 insertions, 0 deletions
| diff --git a/.luacheckrc b/.luacheckrc new file mode 100644 index 0000000..906e1b9 --- /dev/null +++ b/.luacheckrc @@ -0,0 +1,6 @@ +max_line_length = 160 + +read_globals = { +	"minetest", +	"digilines", +} @@ -0,0 +1,22 @@ +This is free and unencumbered software released into the public domain. + +Anyone is free to copy, modify, publish, use, compile, sell, or +distribute this software, either in source code form or as a compiled +binary, for any purpose, commercial or non-commercial, and by any +means. + +In jurisdictions that recognize copyright laws, the author or authors +of this software dedicate any and all copyright interest in the +software to the public domain. We make this dedication for the benefit +of the public at large and to the detriment of our heirs and +successors. We intend this dedication to be an overt act of +relinquishment in perpetuity of all present and future rights to this +software under copyright law. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR +OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. @@ -0,0 +1,13 @@ +Digilines Advanced Touchscreen +============================== + +This is the advanced touchscreen from digistuff. mt-mods removed it when they +took over maintenance, so here it is again as a standalone mod. + +Once a channel is set, simply send a raw formspec to it to display it. +Fields are sent back on the same channel when the form is interacted with. + +Use the "lock" element to control who can interact with the form: + +* lock[1] - Only users with access to the area can submit the form +* lock[0] - Anyone can submit the form diff --git a/init.lua b/init.lua new file mode 100644 index 0000000..850732b --- /dev/null +++ b/init.lua @@ -0,0 +1,89 @@ +minetest.register_node("advtouchscreen:advtouchscreen", { +	description = "Advanced Digilines Touchscreen", +	groups = { +		cracky=3 +	}, +	on_construct = function(pos) +		minetest.get_meta(pos):set_string("formspec","field[channel;Channel;]") +	end, +	drawtype = "nodebox", +	tiles = { +		"advtouchscreen_sides.png", +		"advtouchscreen_sides.png", +		"advtouchscreen_sides.png", +		"advtouchscreen_sides.png", +		"advtouchscreen_sides.png", +		"advtouchscreen_front.png" +		}, +	paramtype = "light", +	paramtype2 = "facedir", +	node_box = { +		type = "fixed", +		fixed = { +			{ -0.5, -0.5, 0.4, 0.5, 0.5, 0.5 } +		} +    }, +    _digistuff_channelcopier_fieldname = "channel", +	_digistuff_channelcopier_onset = function(pos) +		local meta = minetest.get_meta(pos) +		meta:set_int("init",1) +		meta:set_string("formspec","") +	end, +	on_receive_fields = function(pos,_,fields,player) +		local meta = minetest.get_meta(pos) +		local name = player:get_player_name() +		local protected = minetest.is_protected(pos,name) and not minetest.check_player_privs(name,"protection_bypass") +		if meta:get_int("init") == 0 then +			if fields.channel and fields.channel ~= "" then +				if protected then +					minetest.record_protection_violation(pos,name) +					minetest.chat_send_player(name,"You don't have access to set the channel on this screen.") +					return +				end +				meta:set_string("channel",fields.channel) +				meta:set_int("init",1) +				meta:set_string("formspec","") +			end +		else +			local locked = meta:get_int("locked") > 0 +			if locked and protected and not fields.quit then +				minetest.record_protection_violation(pos,name) +				minetest.chat_send_player(name,"This screen is locked.") +				return +			end +			fields.clicker = name +			digilines.receptor_send(pos,digilines.rules.default,meta:get_string("channel"),fields) +		end +	end, +	digiline = { +		receptor = {}, +		effector = { +			action = function(pos,_,channel,msg) +				local meta = minetest.get_meta(pos) +				if meta:get_string("channel") ~= channel or type(msg) ~= "string" then return end +				local lockcommands +				local unlockcommands +				--string.gsub() returns two values, the second one is how many times the replacement happened +				msg,lockcommands = string.gsub(msg,"lock%[1]","") +				msg,unlockcommands = string.gsub(msg,"lock%[0]","") +				if lockcommands > 0 then +					meta:set_int("locked",1) +				elseif unlockcommands > 0 then +					meta:set_int("locked",0) +				end +				meta:set_string("formspec",msg) +			end, +		}, +	}, +}) + +minetest.register_alias_force("digistuff:advtouchscreen","advtouchscreen:advtouchscreen") + +minetest.register_craft({ +	output = "advtouchscreen:advtouchscreen", +	type = "shapeless", +	recipe = { +		"digistuff:touchscreen", +		"default:mese_crystal", +	}, +}) diff --git a/mod.conf b/mod.conf new file mode 100644 index 0000000..3b0e244 --- /dev/null +++ b/mod.conf @@ -0,0 +1,5 @@ +name = advtouchscreen +title = Advanced Digilines Touchscreen +description = Touchscreen that accepts raw formspecs over digilines (split from digistuff) +depends = digilines +optional_depends = digistuff diff --git a/textures/advtouchscreen_front.png b/textures/advtouchscreen_front.pngBinary files differ new file mode 100644 index 0000000..5cea485 --- /dev/null +++ b/textures/advtouchscreen_front.png diff --git a/textures/advtouchscreen_sides.png b/textures/advtouchscreen_sides.pngBinary files differ new file mode 100644 index 0000000..29101af --- /dev/null +++ b/textures/advtouchscreen_sides.png | 
