| | |
| | | -- |
| | | -- The reason the LV|MV|HV type is prepended toe meta data is because some machine could require several supplies to work. |
| | | -- This way the supplies are separated per network. |
| | | technic.DBG = 1 |
| | | local dprint = technic.dprint |
| | | |
| | | technic.networks = {} |
| | | |
| | | local S = technic.getter |
| | | |
| | | minetest.register_craft({ |
| | | output = "technic:switching_station", |
| | | recipe = { |
| | | {"default:steel_ingot", "technic:lv_transformer", "default:steel_ingot"}, |
| | | {"default:copper_ingot", "technic:lv_cable0", "default:copper_ingot"}, |
| | | {"default:steel_ingot", "technic:lv_cable0", "default:steel_ingot"} |
| | | {"technic:cast_iron_ingot", "technic:lv_transformer", "technic:cast_iron_ingot"}, |
| | | {"default:copper_ingot", "technic:lv_cable0", "default:copper_ingot"}, |
| | | {"technic:cast_iron_ingot", "technic:lv_cable0", "technic:cast_iron_ingot"} |
| | | } |
| | | }) |
| | | |
| | | minetest.register_node("technic:switching_station",{ |
| | | description = "Switching Station", |
| | | description = S("Switching Station"), |
| | | tiles = {"technic_water_mill_top_active.png", "technic_water_mill_top_active.png", |
| | | "technic_water_mill_top_active.png", "technic_water_mill_top_active.png", |
| | | "technic_water_mill_top_active.png", "technic_water_mill_top_active.png"}, |
| | |
| | | }, |
| | | on_construct = function(pos) |
| | | local meta = minetest.get_meta(pos) |
| | | meta:set_string("infotext", "Switching Station") |
| | | meta:set_string("infotext", S("Switching Station")) |
| | | end, |
| | | }) |
| | | |
| | |
| | | -- A node must be touched by the station continuously in order to function |
| | | function technic.switching_station_timeout_count(pos, tier) |
| | | local meta = minetest.get_meta(pos) |
| | | timeout = meta:get_int(tier.."_EU_timeout") |
| | | local timeout = meta:get_int(tier.."_EU_timeout") |
| | | if timeout == 0 then |
| | | meta:set_int(tier.."_EU_input", 0) |
| | | else |
| | |
| | | end |
| | | |
| | | local get_network = function(pos1, tier) |
| | | local cached = technic.networks[pos1] |
| | | local cached = technic.networks[minetest.hash_node_position(pos1)] |
| | | if cached and cached.tier == tier then |
| | | touch_nodes(cached.PR_nodes, tier) |
| | | touch_nodes(cached.BA_nodes, tier) |
| | |
| | | i, technic.machines[tier], tier) |
| | | i = i + 1 |
| | | until all_nodes[i] == nil |
| | | technic.networks[pos1] = {tier = tier, PR_nodes = PR_nodes, RE_nodes = RE_nodes, BA_nodes = BA_nodes} |
| | | technic.networks[minetest.hash_node_position(pos1)] = {tier = tier, PR_nodes = PR_nodes, RE_nodes = RE_nodes, BA_nodes = BA_nodes} |
| | | return PR_nodes, BA_nodes, RE_nodes |
| | | end |
| | | |
| | |
| | | local PR_nodes |
| | | local BA_nodes |
| | | local RE_nodes |
| | | local machine_name = S("Switching Station") |
| | | |
| | | -- Which kind of network are we on: |
| | | pos1 = {x=pos.x, y=pos.y-1, z=pos.z} |
| | |
| | | local name = minetest.get_node(pos1).name |
| | | local tier = technic.get_cable_tier(name) |
| | | if tier then |
| | | PR_nodes, RE_nodes, BA_nodes = get_network(pos1, tier) |
| | | PR_nodes, BA_nodes, RE_nodes = get_network(pos1, tier) |
| | | else |
| | | --dprint("Not connected to a network") |
| | | meta:set_string("infotext", "Switching Station - no network") |
| | | meta:set_string("infotext", S("%s Has No Network"):format(machine_name)) |
| | | return |
| | | end |
| | | --dprint("nodes="..table.getn(all_nodes) |
| | |
| | | --dprint("Total BA demand:"..BA_eu_demand) |
| | | |
| | | meta:set_string("infotext", |
| | | "Switching Station. Supply: "..PR_eu_supply |
| | | .." Demand: "..RE_eu_demand) |
| | | S("%s. Supply: %d Demand: %d"):format( |
| | | machine_name, PR_eu_supply, RE_eu_demand)) |
| | | |
| | | -- If the PR supply is enough for the RE demand supply them all |
| | | if PR_eu_supply >= RE_eu_demand then |