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