est31
2015-06-18 a793747d92d9b1d93153c7fb4e0c82fe90624c78
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]"..
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,
704925 96         legacy_facedir_simple = true,
P 97         sounds = default.node_sound_wood_defaults(),
7a3cd4 98         tube = data.tube and tube or nil,
704925 99         on_construct = function(pos)
P 100             local meta = minetest.get_meta(pos)
101             meta:set_string("infotext", desc)
102             meta:set_int(data.tier.."_EU_supply", 0)
103             meta:set_int("burn_time", 0)
7a3cd4 104             meta:set_int("tube_time",  0)
704925 105             meta:set_string("formspec", generator_formspec)
P 106             local inv = meta:get_inventory()
107             inv:set_size("src", 1)
108         end,
0809dd 109         can_dig = technic.machine_can_dig,
S 110         allow_metadata_inventory_put = technic.machine_inventory_put,
111         allow_metadata_inventory_take = technic.machine_inventory_take,
112         allow_metadata_inventory_move = technic.machine_inventory_move,
563a4c 113         technic_run = run,
011397 114         after_place_node = data.tube and pipeworks.after_place,
c8cbd2 115         after_dig_node = technic.machine_after_dig_node
704925 116     })
0809dd 117
704925 118     minetest.register_node("technic:"..ltier.."_generator_active", {
P 119         description = desc,
120         tiles = {"technic_"..ltier.."_generator_top.png", "technic_machine_bottom.png",
121                  "technic_"..ltier.."_generator_side.png", "technic_"..ltier.."_generator_side.png",
122                  "technic_"..ltier.."_generator_side.png", "technic_"..ltier.."_generator_front_active.png"},
123         paramtype2 = "facedir",
7a3cd4 124         groups = active_groups,
704925 125         legacy_facedir_simple = true,
P 126         sounds = default.node_sound_wood_defaults(),
7a3cd4 127         tube = data.tube and tube or nil,
704925 128         drop = "technic:"..ltier.."_generator",
0809dd 129         can_dig = technic.machine_can_dig,
S 130         allow_metadata_inventory_put = technic.machine_inventory_put,
131         allow_metadata_inventory_take = technic.machine_inventory_take,
132         allow_metadata_inventory_move = technic.machine_inventory_move,
563a4c 133         technic_run = run,
1c617f 134         technic_on_disable = function(pos, node)
N 135             local timer = minetest.get_node_timer(pos)
136                 timer:start(1)
137             end,
138         on_timer = function(pos, node)
139             local meta = minetest.get_meta(pos)
140             
141             -- Connected back?
3252da 142             if meta:get_int(tier.."_EU_timeout") > 0 then return false end
1c617f 143             
N 144             local burn_time = meta:get_int("burn_time") or 0
145
146             if burn_time <= 0 then
147                 meta:set_int(tier.."_EU_supply", 0)
148                 meta:set_int("burn_time", 0)
149                 technic.swap_node(pos, "technic:"..ltier.."_generator")
3252da 150                 return false
1c617f 151             end
N 152
153             local burn_totaltime = meta:get_int("burn_totaltime") or 0
154             if burn_totaltime == 0 then burn_totaltime = 1 end
155             burn_time = burn_time - 1
156             meta:set_int("burn_time", burn_time)
157             local percent = math.floor(burn_time / burn_totaltime * 100)
158             meta:set_string("formspec", 
159                 "size[8, 9]"..
160                 "label[0, 0;"..minetest.formspec_escape(desc).."]"..
161                 "list[current_name;src;3, 1;1, 1;]"..
162                 "image[4, 1;1, 1;default_furnace_fire_bg.png^[lowpart:"..
163                 (percent)..":default_furnace_fire_fg.png]"..
d732c8 164                 "list[current_player;main;0, 5;8, 4;]"..
E 165                 "listring[]")
3252da 166             return true
1c617f 167         end,
704925 168     })
563a4c 169
a35db4 170     technic.register_machine(tier, "technic:"..ltier.."_generator",        technic.producer)
S 171     technic.register_machine(tier, "technic:"..ltier.."_generator_active", technic.producer)
704925 172 end
be2f30 173