veikk0
2016-03-30 2258adb2a9b2ec223ea3614a39ecbd59d2d6c948
commit | author | age
be2f30 1 local S = technic.getter
7a3cd4 2
S 3 local tube = {
4     insert_object = function(pos, node, stack, direction)
5         local meta = minetest.get_meta(pos)
6         local inv = meta:get_inventory()
47b0b5 7         return inv:add_item("src", stack)
7a3cd4 8     end,
S 9     can_insert = function(pos, node, stack, direction)
10         local meta = minetest.get_meta(pos)
11         local inv = meta:get_inventory()
12         return inv:room_for_item("src", stack)
13     end,
14     connect_sides = {left=1, right=1, back=1, top=1, bottom=1},
15 }
be2f30 16
704925 17 function technic.register_generator(data) 
P 18     local tier = data.tier
19     local ltier = string.lower(tier)
47b0b5 20
83c649 21     local groups = {snappy=2, choppy=2, oddly_breakable_by_hand=2,
S 22         technic_machine=1, ["technic_"..ltier]=1}
7a3cd4 23     if data.tube then
S 24         groups.tubedevice = 1
25         groups.tubedevice_receiver = 1
26     end
83c649 27     local active_groups = {not_in_creative_inventory = 1}
S 28     for k, v in pairs(groups) do active_groups[k] = v end
47b0b5 29
704925 30     local generator_formspec =
P 31         "invsize[8,9;]"..
7c4b70 32         "label[0,0;"..S("Fuel-Fired %s Generator"):format(tier).."]"..
704925 33         "list[current_name;src;3,1;1,1;]"..
P 34         "image[4,1;1,1;default_furnace_fire_bg.png]"..
d732c8 35         "list[current_player;main;0,5;8,4;]"..
E 36         "listring[]"
704925 37     
7c4b70 38     local desc = S("Fuel-Fired %s Generator"):format(tier)
563a4c 39     
N 40     local run = function(pos, node)
41         local meta = minetest.get_meta(pos)
42         local burn_time = meta:get_int("burn_time")
43         local burn_totaltime = meta:get_int("burn_totaltime")
44         -- If more to burn and the energy produced was used: produce some more
45         if burn_time > 0 then
46             meta:set_int(tier.."_EU_supply", data.supply)
47             burn_time = burn_time - 1
48             meta:set_int("burn_time", burn_time)
49         end
50         -- Burn another piece of fuel
51         if burn_time == 0 then
52             local inv = meta:get_inventory()
53             if not inv:is_empty("src") then 
54                 local fuellist = inv:get_list("src")
6ec12b 55                 local fuel
G 56                 local afterfuel
57                 fuel, afterfuel = minetest.get_craft_result(
563a4c 58                         {method = "fuel", width = 1,
N 59                         items = fuellist})
60                 if not fuel or fuel.time == 0 then
61                     meta:set_string("infotext", S("%s Out Of Fuel"):format(desc))
62                     technic.swap_node(pos, "technic:"..ltier.."_generator")
6d90eb 63                     meta:set_int(tier.."_EU_supply", 0)
563a4c 64                     return
N 65                 end
66                 meta:set_int("burn_time", fuel.time)
67                 meta:set_int("burn_totaltime", fuel.time)
6ec12b 68                 inv:set_stack("src", 1, afterfuel.items[1])
563a4c 69                 technic.swap_node(pos, "technic:"..ltier.."_generator_active")
N 70                 meta:set_int(tier.."_EU_supply", data.supply)
71             else
72                 technic.swap_node(pos, "technic:"..ltier.."_generator")
73                 meta:set_int(tier.."_EU_supply", 0)
74             end
75         end
76         if burn_totaltime == 0 then burn_totaltime = 1 end
77         local percent = math.floor((burn_time / burn_totaltime) * 100)
78         meta:set_string("infotext", desc.." ("..percent.."%)")
79             meta:set_string("formspec", 
80                 "size[8, 9]"..
81                 "label[0, 0;"..minetest.formspec_escape(desc).."]"..
82                 "list[current_name;src;3, 1;1, 1;]"..
83                 "image[4, 1;1, 1;default_furnace_fire_bg.png^[lowpart:"..
84                 (percent)..":default_furnace_fire_fg.png]"..
d732c8 85                 "list[current_player;main;0, 5;8, 4;]"..
E 86                 "listring[]")
563a4c 87     end
N 88     
9aee83 89     minetest.register_node("technic:"..ltier.."_generator", {
704925 90         description = desc,
P 91         tiles = {"technic_"..ltier.."_generator_top.png", "technic_machine_bottom.png",
92                  "technic_"..ltier.."_generator_side.png", "technic_"..ltier.."_generator_side.png",
93                  "technic_"..ltier.."_generator_side.png", "technic_"..ltier.."_generator_front.png"}, 
94         paramtype2 = "facedir",
7a3cd4 95         groups = groups,
83c649 96         connect_sides = {"bottom", "back", "left", "right"},
704925 97         legacy_facedir_simple = true,
P 98         sounds = default.node_sound_wood_defaults(),
7a3cd4 99         tube = data.tube and tube or nil,
704925 100         on_construct = function(pos)
P 101             local meta = minetest.get_meta(pos)
102             meta:set_string("infotext", desc)
103             meta:set_int(data.tier.."_EU_supply", 0)
104             meta:set_int("burn_time", 0)
7a3cd4 105             meta:set_int("tube_time",  0)
704925 106             meta:set_string("formspec", generator_formspec)
P 107             local inv = meta:get_inventory()
108             inv:set_size("src", 1)
109         end,
0809dd 110         can_dig = technic.machine_can_dig,
S 111         allow_metadata_inventory_put = technic.machine_inventory_put,
112         allow_metadata_inventory_take = technic.machine_inventory_take,
113         allow_metadata_inventory_move = technic.machine_inventory_move,
563a4c 114         technic_run = run,
011397 115         after_place_node = data.tube and pipeworks.after_place,
c8cbd2 116         after_dig_node = technic.machine_after_dig_node
704925 117     })
0809dd 118
704925 119     minetest.register_node("technic:"..ltier.."_generator_active", {
P 120         description = desc,
121         tiles = {"technic_"..ltier.."_generator_top.png", "technic_machine_bottom.png",
122                  "technic_"..ltier.."_generator_side.png", "technic_"..ltier.."_generator_side.png",
123                  "technic_"..ltier.."_generator_side.png", "technic_"..ltier.."_generator_front_active.png"},
124         paramtype2 = "facedir",
7a3cd4 125         groups = active_groups,
83c649 126         connect_sides = {"bottom"},
704925 127         legacy_facedir_simple = true,
P 128         sounds = default.node_sound_wood_defaults(),
7a3cd4 129         tube = data.tube and tube or nil,
704925 130         drop = "technic:"..ltier.."_generator",
0809dd 131         can_dig = technic.machine_can_dig,
S 132         allow_metadata_inventory_put = technic.machine_inventory_put,
133         allow_metadata_inventory_take = technic.machine_inventory_take,
134         allow_metadata_inventory_move = technic.machine_inventory_move,
563a4c 135         technic_run = run,
1c617f 136         technic_on_disable = function(pos, node)
N 137             local timer = minetest.get_node_timer(pos)
138                 timer:start(1)
139             end,
140         on_timer = function(pos, node)
141             local meta = minetest.get_meta(pos)
142             
143             -- Connected back?
3252da 144             if meta:get_int(tier.."_EU_timeout") > 0 then return false end
1c617f 145             
N 146             local burn_time = meta:get_int("burn_time") or 0
147
148             if burn_time <= 0 then
149                 meta:set_int(tier.."_EU_supply", 0)
150                 meta:set_int("burn_time", 0)
151                 technic.swap_node(pos, "technic:"..ltier.."_generator")
3252da 152                 return false
1c617f 153             end
N 154
155             local burn_totaltime = meta:get_int("burn_totaltime") or 0
156             if burn_totaltime == 0 then burn_totaltime = 1 end
157             burn_time = burn_time - 1
158             meta:set_int("burn_time", burn_time)
159             local percent = math.floor(burn_time / burn_totaltime * 100)
160             meta:set_string("formspec", 
161                 "size[8, 9]"..
162                 "label[0, 0;"..minetest.formspec_escape(desc).."]"..
163                 "list[current_name;src;3, 1;1, 1;]"..
164                 "image[4, 1;1, 1;default_furnace_fire_bg.png^[lowpart:"..
165                 (percent)..":default_furnace_fire_fg.png]"..
d732c8 166                 "list[current_player;main;0, 5;8, 4;]"..
E 167                 "listring[]")
3252da 168             return true
1c617f 169         end,
704925 170     })
563a4c 171
a35db4 172     technic.register_machine(tier, "technic:"..ltier.."_generator",        technic.producer)
S 173     technic.register_machine(tier, "technic:"..ltier.."_generator_active", technic.producer)
704925 174 end
be2f30 175