From 86bb776f7848f26435723f671ef7d238ace19f76 Mon Sep 17 00:00:00 2001 From: Maciej Kasatkin <mk@realbadangel.pl> Date: Tue, 11 Sep 2012 20:15:12 +0200 Subject: [PATCH] Added API for registering power tools --- electric.lua | 157 ++++++++++++++++++---------------------------------- 1 files changed, 54 insertions(+), 103 deletions(-) diff --git a/electric.lua b/electric.lua index 6ddaa46..0faee79 100644 --- a/electric.lua +++ b/electric.lua @@ -1,3 +1,18 @@ +power_tools ={} + +registered_power_tools_count=1 + +function register_power_tool (string1,max_charge) +power_tools[registered_power_tools_count]={} +power_tools[registered_power_tools_count].tool_name=string1 +power_tools[registered_power_tools_count].max_charge=max_charge +registered_power_tools_count=registered_power_tools_count+1 +end + +register_power_tool ("technic:mining_drill",60000) +register_power_tool ("technic:laser_mk1",40000) +register_power_tool ("technic:battery",10000) + minetest.register_alias("battery", "technic:battery") minetest.register_alias("battery_box", "technic:battery_box") minetest.register_alias("electric_furnace", "technic:electric_furnace") @@ -30,12 +45,6 @@ } }) - ---minetest.register_craftitem("technic:battery", { --- description = "Recharcheable battery", --- inventory_image = "technic_battery.png", --- stack_max = 1, ---}) minetest.register_tool("technic:battery", {description = "RE Battery", @@ -295,51 +304,36 @@ local meta = minetest.env:get_meta(pos) charge= meta:get_float("battery_charge") max_charge= 60000 - - local inv = meta:get_inventory() - if inv:is_empty("src")==false then + + local inv = meta:get_inventory() + if inv:is_empty("src")==false then srcstack = inv:get_stack("src", 1) src_item=srcstack:to_table() - if src_item["name"]== "technic:battery" then + local item_max_charge = nil + local counter=registered_power_tools_count-1 + for i=1, counter,1 do + if power_tools[i].tool_name==src_item["name"] then + item_max_charge=power_tools[i].max_charge + end + end + if item_max_charge then local load1=tonumber((src_item["wear"])) - load1=get_RE_item_load(load1,10000) + load1=get_RE_item_load(load1,item_max_charge) load_step=1000 - if load1<10000 and charge>0 then + if load1<item_max_charge and charge>0 then if charge-load_step<0 then load_step=charge end - if load1+load_step>10000 then load_step=10000-load1 end + if load1+load_step>item_max_charge then load_step=item_max_charge-load1 end load1=load1+load_step charge=charge-load_step - load1=set_RE_item_load(load1,10000) + load1=set_RE_item_load(load1,item_max_charge) src_item["wear"]=tostring(load1) inv:set_stack("src", 1, src_item) - end - end end meta:set_float("battery_charge",charge) - + end + end - if inv:is_empty("src")==false then - srcstack = inv:get_stack("src", 1) - src_item=srcstack:to_table() - if src_item["name"]== "technic:laser_mk1" then - local load1=tonumber((src_item["wear"])) - load1=get_RE_item_load(load1,40000) - load_step=1000 - if load1<40000 and charge>0 then - if charge-load_step<0 then load_step=charge end - if load1+load_step>40000 then load_step=40000-load1 end - load1=load1+load_step - charge=charge-load_step - load1=set_RE_item_load(load1,40000) - src_item["wear"]=tostring(load1) - inv:set_stack("src", 1, src_item) - end - end - end - meta:set_float("battery_charge",charge) - - if inv:is_empty("dst") == false then srcstack = inv:get_stack("dst", 1) src_item=srcstack:to_table() @@ -410,13 +404,23 @@ local pos1={} i=1 repeat - if PR_nodes[i]==nil then break end + if PR_nodes[i]==nil then break end -- gettin power from all connected producers pos1.x=PR_nodes[i].x pos1.y=PR_nodes[i].y pos1.z=PR_nodes[i].z local meta1 = minetest.env:get_meta(pos1) - local active=meta1:get_float("active") - if active==1 then charge=charge+80 end + local internal_EU_buffer=meta1:get_float("internal_EU_buffer") + if charge<max_charge then + charge_to_take=200 + if internal_EU_buffer-charge_to_take<=0 then + charge_to_take=internal_EU_buffer + end + if charge_to_take>0 then + charge=charge+charge_to_take + internal_EU_buffer=internal_EU_buffer-charge_to_take + meta1:set_float("internal_EU_buffer",internal_EU_buffer) + end + end i=i+1 until false @@ -499,8 +503,16 @@ meta = minetest.env:get_meta(pos1) if meta:get_float("cablelike")==1 then new_node_added=add_new_cable_node(LV_nodes,pos1) end if minetest.env:get_node(pos1).name == "technic:solar_panel" then new_node_added=add_new_cable_node(PR_nodes,pos1) end +if minetest.env:get_node(pos1).name == "technic:generator" then new_node_added=add_new_cable_node(PR_nodes,pos1) end +if minetest.env:get_node(pos1).name == "technic:generator_active" then new_node_added=add_new_cable_node(PR_nodes,pos1) end +if minetest.env:get_node(pos1).name == "technic:geothermal" then new_node_added=add_new_cable_node(PR_nodes,pos1) end +if minetest.env:get_node(pos1).name == "technic:geothermal_active" then new_node_added=add_new_cable_node(PR_nodes,pos1) end +if minetest.env:get_node(pos1).name == "technic:water_mill" then new_node_added=add_new_cable_node(PR_nodes,pos1) end +if minetest.env:get_node(pos1).name == "technic:water_mill_active" then new_node_added=add_new_cable_node(PR_nodes,pos1) end if minetest.env:get_node(pos1).name == "technic:electric_furnace" then new_node_added=add_new_cable_node(RE_nodes,pos1) end if minetest.env:get_node(pos1).name == "technic:electric_furnace_active" then new_node_added=add_new_cable_node(RE_nodes,pos1) end +if minetest.env:get_node(pos1).name == "technic:alloy_furnace" then new_node_added=add_new_cable_node(RE_nodes,pos1) end +if minetest.env:get_node(pos1).name == "technic:alloy_furnace_active" then new_node_added=add_new_cable_node(RE_nodes,pos1) end if minetest.env:get_node(pos1).name == "technic:tool_workshop" then new_node_added=add_new_cable_node(RE_nodes,pos1) end if minetest.env:get_node(pos1).name == "technic:music_player" then new_node_added=add_new_cable_node(RE_nodes,pos1) end if minetest.env:get_node(pos1).name == "technic:grinder" then new_node_added=add_new_cable_node(RE_nodes,pos1) end @@ -524,65 +536,4 @@ end end return charge -end - -minetest.register_node("technic:solar_panel", { - tiles = {"technic_solar_panel_top.png", "technic_solar_panel_side.png", "technic_solar_panel_side.png", - "technic_solar_panel_side.png", "technic_solar_panel_side.png", "technic_solar_panel_side.png"}, - groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2}, - sounds = default.node_sound_wood_defaults(), - description="Solar Panel", - active = false, - technic_power_machine=1, - drawtype = "nodebox", - paramtype = "light", - is_ground_content = true, - node_box = { - type = "fixed", - fixed = {-0.5, -0.5, -0.5, 0.5, 0, 0.5}, - }, - selection_box = { - type = "fixed", - fixed = {-0.5, -0.5, -0.5, 0.5, 0, 0.5}, - }, - on_construct = function(pos) - local meta = minetest.env:get_meta(pos) - meta:set_float("technic_power_machine", 1) - meta:set_string("infotext", "Solar Panel") - meta:set_float("active", false) - end, -}) - -minetest.register_craft({ - output = 'technic:solar_panel 1', - recipe = { - {'default:sand', 'default:sand','default:sand'}, - {'default:sand', 'moreores:copper_ingot','default:sand'}, - {'default:sand', 'default:sand','default:sand'}, - - } -}) - -minetest.register_abm( - {nodenames = {"technic:solar_panel"}, - interval = 1, - chance = 1, - action = function(pos, node, active_object_count, active_object_count_wider) - - local pos1={} - pos1.y=pos.y+1 - pos1.x=pos.x - pos1.z=pos.z - - local light = minetest.env:get_node_light(pos1, nil) - local meta = minetest.env:get_meta(pos) - if light == nil then light = 0 end - if light >= 12 then - meta:set_string("infotext", "Solar Panel is active ") - meta:set_float("active",1) - else - meta:set_string("infotext", "Solar Panel is inactive"); - meta:set_float("active",0) - end - end, -}) \ No newline at end of file +end \ No newline at end of file -- Gitblit v1.8.0