forked from minetest-mods/mesecons
		
	Experimental battery - not finished yet
This commit is contained in:
		
							
								
								
									
										1
									
								
								mesecons_battery/depends.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								mesecons_battery/depends.txt
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1 @@
 | 
				
			|||||||
 | 
					mesecons
 | 
				
			||||||
							
								
								
									
										130
									
								
								mesecons_battery/init.lua
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										130
									
								
								mesecons_battery/init.lua
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,130 @@
 | 
				
			|||||||
 | 
					for i = 1, 5 do
 | 
				
			||||||
 | 
						minetest.register_node("mesecons_battery:battery_charging_"..i, {
 | 
				
			||||||
 | 
							drawtype = "nodebox",
 | 
				
			||||||
 | 
							tiles = {"jeija_battery_charging.png"},
 | 
				
			||||||
 | 
							paramtype = "light",
 | 
				
			||||||
 | 
							is_ground_content = true,
 | 
				
			||||||
 | 
							walkable = true,
 | 
				
			||||||
 | 
							node_box = {
 | 
				
			||||||
 | 
								type = "fixed",
 | 
				
			||||||
 | 
								fixed = {
 | 
				
			||||||
 | 
									{-0.499, -0.499, -0.499, -0.4,   0.499,       0.499},
 | 
				
			||||||
 | 
									{ 0.499, -0.499, -0.499,  0.4,   0.499,       0.499},
 | 
				
			||||||
 | 
									{-0.499, -0.499, -0.499,  0.499, 0.499,      -0.4  },
 | 
				
			||||||
 | 
									{-0.499, -0.499,  0.499,  0.499, 0.499,       0.4  },
 | 
				
			||||||
 | 
									{-0.4  , -0.5  , -0.4  ,  0.4  , 1*(i/5)-0.5, 0.4}}
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							selection_box = {
 | 
				
			||||||
 | 
								type = "fixed",
 | 
				
			||||||
 | 
								fixed = {
 | 
				
			||||||
 | 
									{-0.499, -0.499, -0.499, -0.4,   0.499,       0.499},
 | 
				
			||||||
 | 
									{ 0.499, -0.499, -0.499,  0.4,   0.499,       0.499},
 | 
				
			||||||
 | 
									{-0.499, -0.499, -0.499,  0.499, 0.499,      -0.4  },
 | 
				
			||||||
 | 
									{-0.499, -0.499,  0.499,  0.499, 0.499,       0.4  },
 | 
				
			||||||
 | 
									{-0.4  , -0.5  , -0.4  ,  0.4  , 1*(i/5)-0.5, 0.4}}
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							groups = {dig_immediate=2},
 | 
				
			||||||
 | 
						    	description="Battery",
 | 
				
			||||||
 | 
						})
 | 
				
			||||||
 | 
						mesecon:add_receptor_node_off("mesecons_battery:battery_charging_"..i)
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					for i = 1, 5 do
 | 
				
			||||||
 | 
						minetest.register_node("mesecons_battery:battery_discharging_"..i, {
 | 
				
			||||||
 | 
							drawtype = "nodebox",
 | 
				
			||||||
 | 
							tiles = {"jeija_battery_discharging.png"},
 | 
				
			||||||
 | 
							paramtype = "light",
 | 
				
			||||||
 | 
							is_ground_content = true,
 | 
				
			||||||
 | 
							walkable = true,
 | 
				
			||||||
 | 
							node_box = {
 | 
				
			||||||
 | 
								type = "fixed",
 | 
				
			||||||
 | 
								fixed = {
 | 
				
			||||||
 | 
									{-0.499, -0.499, -0.499, -0.4,   0.499,       0.499},
 | 
				
			||||||
 | 
									{ 0.499, -0.499, -0.499,  0.4,   0.499,       0.499},
 | 
				
			||||||
 | 
									{-0.499, -0.499, -0.499,  0.499, 0.499,      -0.4  },
 | 
				
			||||||
 | 
									{-0.499, -0.499,  0.499,  0.499, 0.499,       0.4  },
 | 
				
			||||||
 | 
									{-0.4  , -0.5  , -0.4  ,  0.4  , 1*(i/5)-0.5, 0.4}}
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							selection_box = {
 | 
				
			||||||
 | 
								type = "fixed",
 | 
				
			||||||
 | 
								fixed = {
 | 
				
			||||||
 | 
									{-0.499, -0.499, -0.499, -0.4,   0.499,       0.499},
 | 
				
			||||||
 | 
									{ 0.499, -0.499, -0.499,  0.4,   0.499,       0.499},
 | 
				
			||||||
 | 
									{-0.499, -0.499, -0.499,  0.499, 0.499,      -0.4  },
 | 
				
			||||||
 | 
									{-0.499, -0.499,  0.499,  0.499, 0.499,       0.4  },
 | 
				
			||||||
 | 
									{-0.4  , -0.5  , -0.4  ,  0.4  , 1*(i/5)-0.5, 0.4}}
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							groups = {dig_immediate=2},
 | 
				
			||||||
 | 
						    	description="Battery",
 | 
				
			||||||
 | 
						})
 | 
				
			||||||
 | 
						mesecon:add_receptor_node("mesecons_battery:battery_discharging_"..i)
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					minetest.register_on_placenode(function (pos, newnode, placer)
 | 
				
			||||||
 | 
						meta = minetest.env:get_meta(pos)
 | 
				
			||||||
 | 
						meta:set_int("batterstate", 0)
 | 
				
			||||||
 | 
						meta:set_int("charging", 0)
 | 
				
			||||||
 | 
					end)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					minetest.register_on_punchnode(function(pos, node, puncher)
 | 
				
			||||||
 | 
						if string.find(node.name, "mesecons_battery:battery_charging") then
 | 
				
			||||||
 | 
							local meta = minetest.env:get_meta(pos);
 | 
				
			||||||
 | 
							local batterystate = meta:get_int("batterystate")
 | 
				
			||||||
 | 
							local charging = meta:get_int("charging")
 | 
				
			||||||
 | 
							minetest.env:add_node(pos, {name=string.gsub(node.name, "charging", "discharging")})
 | 
				
			||||||
 | 
							mesecon:receptor_on(pos)
 | 
				
			||||||
 | 
							meta:set_int("batterystate", batterystate)
 | 
				
			||||||
 | 
							meta:set_int("charging", charging)
 | 
				
			||||||
 | 
						end
 | 
				
			||||||
 | 
						if string.find(node.name, "mesecons_battery:battery_discharging") then
 | 
				
			||||||
 | 
							local meta = minetest.env:get_meta(pos);
 | 
				
			||||||
 | 
							local batterystate = meta:get_int("batterystate")
 | 
				
			||||||
 | 
							local charging = meta:get_int("charging")
 | 
				
			||||||
 | 
							minetest.env:add_node(pos, {name=string.gsub(node.name, "discharging", "charging")})
 | 
				
			||||||
 | 
							mesecon:receptor_off(pos)
 | 
				
			||||||
 | 
							meta:set_int("batterystate", batterystate)
 | 
				
			||||||
 | 
							meta:set_int("charging", charging)
 | 
				
			||||||
 | 
						end
 | 
				
			||||||
 | 
					end)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					minetest.register_abm({
 | 
				
			||||||
 | 
					nodenames = {"mesecons_battery:battery_charging_1", "mesecons_battery:battery_charging_2", "mesecons_battery:battery_charging_3", "mesecons_battery:battery_charging_4", "mesecons_battery:battery_charging_5"},
 | 
				
			||||||
 | 
						interval = 1,
 | 
				
			||||||
 | 
						chance = 1,
 | 
				
			||||||
 | 
						action = function(pos, node, active_object_count, active_object_count_wider)
 | 
				
			||||||
 | 
							local meta = minetest.env:get_meta(pos);
 | 
				
			||||||
 | 
							if meta:get_int("charging") == 1 then
 | 
				
			||||||
 | 
								local batterystate = meta:get_int("batterystate")
 | 
				
			||||||
 | 
								local charging = meta:get_int("charging")
 | 
				
			||||||
 | 
								local name = node.name;
 | 
				
			||||||
 | 
								if batterystate < 100 then --change battery charging state
 | 
				
			||||||
 | 
									batterystate = batterystate + 1
 | 
				
			||||||
 | 
								end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								if string.find(node.name, tostring(math.ceil(batterystate/20))) == nil then
 | 
				
			||||||
 | 
									node.name = string.gsub(node.name, tostring(math.ceil(batterystate/20)-1), tostring(math.ceil(batterystate/20))) --change node for new nodebox model
 | 
				
			||||||
 | 
								end
 | 
				
			||||||
 | 
								minetest.env:add_node(pos, node)
 | 
				
			||||||
 | 
								meta:set_int("batterystate", batterystate)
 | 
				
			||||||
 | 
								meta:set_int("charging", charging)
 | 
				
			||||||
 | 
							end
 | 
				
			||||||
 | 
						end,
 | 
				
			||||||
 | 
					})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					mesecon:register_on_signal_on(function(pos, node)
 | 
				
			||||||
 | 
						if string.find(node.name, "mesecons_battery:battery") then
 | 
				
			||||||
 | 
							minetest.env:get_meta(pos):set_int("charging", 1)
 | 
				
			||||||
 | 
						end
 | 
				
			||||||
 | 
					end)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					mesecon:register_on_signal_off(function(pos, node)
 | 
				
			||||||
 | 
						if string.find(node.name, "mesecons_battery:battery") then
 | 
				
			||||||
 | 
							minetest.env:get_meta(pos):set_int("charging", 0)
 | 
				
			||||||
 | 
						end
 | 
				
			||||||
 | 
					end)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					minetest.register_on_punchnode(function(pos, node, puncher)
 | 
				
			||||||
 | 
						print(minetest.env:get_meta(pos):get_int("batterystate"))
 | 
				
			||||||
 | 
					end)
 | 
				
			||||||
		Reference in New Issue
	
	Block a user