Tweak mesecon control of forcefield
authorZefram <zefram@fysh.org>
Tue, 15 Jul 2014 22:42:27 +0000 (23:42 +0100)
committerZefram <zefram@fysh.org>
Wed, 23 Jul 2014 15:49:08 +0000 (16:49 +0100)
Drop support for negative mesecon control.  This requires users of
negative mesecon control to invert their mesecon signal externally.

Comment on rationale for the way toggle buttons in formspec are managed.

technic/locale/template.txt
technic/machines/HV/forcefield.lua

index d771c09c41944c42f97bb2b6154ea4e4123e5c1c..43090dff4a1b009f46611d80565a9d6bd0183fcd 100644 (file)
@@ -56,8 +56,7 @@ Mode: %s =
 single items =
 whole stacks =
 Ignoring Mesecon Signal =
-Controlled by Positive Mesecon Signal =
-Controlled by Inverted Mesecon Signal =
+Controlled by Mesecon Signal =
 
 ## Machine names
 # $1: Tier
index d5b5e54734c5dac661306916fbd940164655eaa6..f84cdb47ab5d8afe90e52f4b29340392cb9bfd09 100644 (file)
@@ -63,19 +63,21 @@ local function update_forcefield(pos, range, active)
 end
 
 local function set_forcefield_formspec(meta)
-       local formspec = "size[5.5,2.25]"..
-               "field[2.25,0.5;2,1;range;"..S("Range")..";"..meta:get_int("range").."]"
+       local formspec = "size[5,2.25]"..
+               "field[2,0.5;2,1;range;"..S("Range")..";"..meta:get_int("range").."]"
+       -- The names for these toggle buttons are explicit about which
+       -- state they'll switch to, so that multiple presses (arising
+       -- from the ambiguity between lag and a missed press) only make
+       -- the single change that the user expects.
        if meta:get_int("mesecon_mode") == 0 then
-               formspec = formspec.."button[0,1;5.5,1;mesecon_mode_1;"..S("Ignoring Mesecon Signal").."]"
-       elseif meta:get_int("mesecon_mode") == 1 then
-               formspec = formspec.."button[0,1;5.5,1;mesecon_mode_2;"..S("Controlled by Positive Mesecon Signal").."]"
+               formspec = formspec.."button[0,1;5,1;mesecon_mode_1;"..S("Ignoring Mesecon Signal").."]"
        else
-               formspec = formspec.."button[0,1;5.5,1;mesecon_mode_0;"..S("Controlled by Inverted Mesecon Signal").."]"
+               formspec = formspec.."button[0,1;5,1;mesecon_mode_0;"..S("Controlled by Mesecon Signal").."]"
        end
        if meta:get_int("enabled") == 0 then
-               formspec = formspec.."button[0.25,1.75;5,1;enable;"..S("%s Disabled"):format(S("%s Forcefield Emitter"):format("HV")).."]"
+               formspec = formspec.."button[0,1.75;5,1;enable;"..S("%s Disabled"):format(S("%s Forcefield Emitter"):format("HV")).."]"
        else
-               formspec = formspec.."button[0.25,1.75;5,1;disable;"..S("%s Enabled"):format(S("%s Forcefield Emitter"):format("HV")).."]"
+               formspec = formspec.."button[0,1.75;5,1;disable;"..S("%s Enabled"):format(S("%s Forcefield Emitter"):format("HV")).."]"
        end
        meta:set_string("formspec", formspec)
 end
@@ -98,7 +100,6 @@ local forcefield_receive_fields = function(pos, formname, fields, sender)
        if fields.disable then meta:set_int("enabled", 0) end
        if fields.mesecon_mode_0 then meta:set_int("mesecon_mode", 0) end
        if fields.mesecon_mode_1 then meta:set_int("mesecon_mode", 1) end
-       if fields.mesecon_mode_2 then meta:set_int("mesecon_mode", 2) end
        set_forcefield_formspec(meta)
 end
 
@@ -117,7 +118,7 @@ local run = function(pos, node, active_object_count, active_object_count_wider)
        local meta = minetest.get_meta(pos)
        local eu_input   = meta:get_int("HV_EU_input")
        local eu_demand  = meta:get_int("HV_EU_demand")
-       local enabled = meta:get_int("enabled") ~= 0 and (meta:get_int("mesecon_mode") == 0 or (meta:get_int("mesecon_mode") == 1 and meta:get_int("mesecon_effect") ~= 0) or (meta:get_int("mesecon_mode") == 2 and meta:get_int("mesecon_effect") == 0))
+       local enabled = meta:get_int("enabled") ~= 0 and (meta:get_int("mesecon_mode") == 0 or meta:get_int("mesecon_effect") ~= 0)
        local machine_name = S("%s Forcefield Emitter"):format("HV")
 
        local power_requirement = math.floor(