Maciej Kasatkin
2012-09-12 1590ddce2d4b29be4f828651b29ae9263dc2b4d1
commit | author | age
ad8932 1 minetest.register_alias("generator", "technic:generator")
MK 2 minetest.register_alias("generator", "technic:generator_active")
3
4 minetest.register_craft({
5     output = 'technic:generator',
6     recipe = {
7         {'default:stone', 'default:stone', 'default:stone'},
8         {'default:stone', '', 'default:stone'},
9         {'default:stone', 'moreores:copper_ingot', 'default:stone'},
10     }
11 })
12
13 minetest.register_craftitem("technic:generator", {
14     description = "Coal Driven Generator",
15     stack_max = 99,
16 }) 
17
18 generatorr_formspec =
19     "invsize[8,9;]"..
20     "image[1,1;1,2;technic_power_meter_bg.png]"..
21     "label[0,0;Generator]"..
22     "label[1,3;Power level]"..
23     "list[current_name;src;3,1;1,1;]"..
24     "image[4,1;1,1;default_furnace_fire_bg.png]"..
25     "list[current_player;main;0,5;8,4;]"
26     
27
28 minetest.register_node("technic:generator", {
29     description = "Coal Driven Generator",
30     tiles = {"technic_generator_top.png", "technic_machine_bottom.png", "technic_generator_side.png",
31         "technic_generator_side.png", "technic_generator_side.png", "technic_generator_front.png"},
32     paramtype2 = "facedir",
33     groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2},
34     legacy_facedir_simple = true,
35     sounds = default.node_sound_wood_defaults(),
36     technic_power_machine=1,
37     internal_EU_buffer=0;
38     internal_EU_buffer_size=5000;
39     burn_time=0;
40     on_construct = function(pos)
41         local meta = minetest.env:get_meta(pos)
42         meta:set_string("infotext", "Generator")
43         meta:set_float("technic_power_machine", 1)
44         meta:set_float("internal_EU_buffer", 0)
45         meta:set_float("internal_EU_buffer_size", 5000)
46         meta:set_string("formspec", generator_formspec)
47         meta:set_float("burn_time", 0)
48         
49         local inv = meta:get_inventory()
50         inv:set_size("src", 1)
51         
52         end,    
53     can_dig = function(pos,player)
54         local meta = minetest.env:get_meta(pos);
55         local inv = meta:get_inventory()
56         if not inv:is_empty("src") then
57             return false
58         end
59         return true
60         end,
61
62 })
63
64 minetest.register_node("technic:generator_active", {
65     description = "Coal Driven Generator",
66     tiles = {"technic_generator_top.png", "technic_machine_bottom.png", "technic_generator_side.png",
67         "technic_generator_side.png", "technic_generator_side.png", "technic_generator_front_active.png"},
68     paramtype2 = "facedir",
69     groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2,not_in_creative_inventory=1},
70     legacy_facedir_simple = true,
71     sounds = default.node_sound_wood_defaults(),
72     drop="technic:generator",
73     technic_power_machine=1,
74     internal_EU_buffer=0;
75     internal_EU_buffer_size=0;
76     burn_time=0;
77     can_dig = function(pos,player)
78         local meta = minetest.env:get_meta(pos);
79         local inv = meta:get_inventory()
80         if not inv:is_empty("src") then
81             return false
82         end
83         return true
84         end,
85
86 })
87 minetest.register_abm({
88     nodenames = {"technic:generator","technic:generator_active"},
89     interval = 1,
90     chance = 1,
91     action = function(pos, node, active_object_count, active_object_count_wider)
92
93     local meta = minetest.env:get_meta(pos)
94     local burn_time= meta:get_float("burn_time")
95     local charge= meta:get_float("internal_EU_buffer")
96     local max_charge= meta:get_float("internal_EU_buffer_size")
97     local burn_charge=200
98
99     if burn_time>0 then
100         if charge+burn_charge>max_charge then
101         burn_charge=max_charge-charge
102         end
103         if burn_charge>0 then 
104         burn_time=burn_time-1
105         meta:set_float("burn_time",burn_time)
106         charge=charge+burn_charge
107         meta:set_float("internal_EU_buffer",charge)
108         end
109         
110     end
111     if burn_time==0 then
112         local inv = meta:get_inventory()
113         if inv:is_empty("src")==false  then 
114         local srcstack = inv:get_stack("src", 1)
115         src_item=srcstack:to_table()
116         if src_item["name"]== "default:coal_lump" then
117         srcstack:take_item()
118         inv:set_stack("src", 1, srcstack)
119         burn_time=16
120         meta:set_float("burn_time",burn_time)
121         hacky_swap_node (pos,"technic:generator_active") 
122         end
123         end
124     end
125
126     local load = math.floor((charge/max_charge)*100)
127     local percent = math.floor((burn_time/16)*100)
128     meta:set_string("formspec",
129                 "invsize[8,9;]"..
130                 "image[1,1;1,2;technic_power_meter_bg.png^[lowpart:"..
131                         (load)..":technic_power_meter_fg.png]"..
132                 "label[0,0;Generator]"..
133                 "label[1,3;Power level]"..
134                 "list[current_name;src;3,1;1,1;]"..
135                 "image[4,1;1,1;default_furnace_fire_bg.png^[lowpart:"..
136                         (percent)..":default_furnace_fire_fg.png]"..
137                 "list[current_player;main;0,5;8,4;]"
138                 )
139                 
140     if burn_time==0 then
141         hacky_swap_node (pos,"technic:generator")
142     end
143         
144
145     end
146 }) 
147