213 lines
5.7 KiB
Lua
213 lines
5.7 KiB
Lua
--[[
|
|
|
|
Networks
|
|
========
|
|
|
|
Copyright (C) 2021 Joachim Stolberg
|
|
|
|
AGPL v3
|
|
See LICENSE.txt for more information
|
|
|
|
]]--
|
|
|
|
-- for lazy programmers
|
|
local P2S = function(pos) if pos then return minetest.pos_to_string(pos) end end
|
|
local S2P = minetest.string_to_pos
|
|
local M = minetest.get_meta
|
|
|
|
local power = networks.power
|
|
local liquid = networks.liquid
|
|
|
|
local function round(val)
|
|
return math.floor(val + 0.5)
|
|
end
|
|
|
|
local function get_list(tbl, sep)
|
|
local keys = {}
|
|
for k,v in pairs(tbl) do
|
|
if v then
|
|
keys[#keys + 1] = k
|
|
end
|
|
end
|
|
return table.concat(keys, sep)
|
|
end
|
|
|
|
local NetwTypes = false
|
|
|
|
local function collect_netw_types()
|
|
NetwTypes = {}
|
|
for k,v in pairs(networks.registered_networks.power) do
|
|
NetwTypes[k] = "power"
|
|
end
|
|
for k,v in pairs(networks.registered_networks.liquid) do
|
|
NetwTypes[k] = "liquid"
|
|
end
|
|
end
|
|
|
|
local function print_sides(pos, api, netw_type)
|
|
local t = {}
|
|
for _, dir in ipairs(networks.get_node_connection_dirs(pos, netw_type)) do
|
|
t[#t + 1]= tubelib2.dir_to_string(dir)
|
|
end
|
|
print("# " .. api .. " - " .. netw_type .. " dirs: " .. table.concat(t, ", "))
|
|
end
|
|
|
|
local function print_power_network_data(pos, api, netw_type, outdir)
|
|
local tlib2 = networks.registered_networks[api][netw_type]
|
|
local data = power.get_network_data(pos, tlib2, outdir)
|
|
local netw = networks.get_network_table(pos, tlib2, outdir)
|
|
if netw then
|
|
print(" - Number of network nodes: " .. (netw.num_nodes or 0))
|
|
print(" - Number of generators: " .. #(netw.gen or {}))
|
|
print(" - Number of consumers: " .. #(netw.con or {}))
|
|
print(" - Number of storage systems: " .. #(netw.sto or {}))
|
|
end
|
|
if data then
|
|
local s = string.format(" - Netw %u: generated = %u/%u, consumed = %u, storage load = %u/%u",
|
|
data.netw_num, round(data.provided),
|
|
data.available, round(data.consumed),
|
|
round(data.curr_load), round(data.max_capa))
|
|
print(s)
|
|
end
|
|
end
|
|
|
|
local function print_liquid_network_data(pos, api, netw_type, outdir)
|
|
local tlib2 = networks.registered_networks[api][netw_type]
|
|
local netw = networks.get_network_table(pos, tlib2, outdir)
|
|
if netw then
|
|
print(" - Number of network nodes: " .. (netw.num_nodes or 0))
|
|
print(" - Number of pumps: " .. #(netw.pump or {}))
|
|
print(" - Number of tanks: " .. #(netw.tank or {}))
|
|
end
|
|
end
|
|
|
|
local function is_junction(pos, tlib2)
|
|
local ndef = networks.net_def(pos, tlib2.tube_type)
|
|
return ndef.ntype == "junc"
|
|
end
|
|
|
|
local function print_netID(pos, api, netw_type)
|
|
local tlib2 = networks.registered_networks[api][netw_type]
|
|
for _,outdir in ipairs(networks.get_outdirs(pos, tlib2)) do
|
|
local netID = networks.get_netID(pos, outdir)
|
|
local s = tubelib2.dir_to_string(outdir)
|
|
if netID then
|
|
print("- " .. s .. ": netwNum for '" .. netw_type .. "': " .. networks.netw_num(netID))
|
|
if api == "liquid" then
|
|
print_liquid_network_data(pos, api, netw_type, outdir)
|
|
elseif api == "power" then
|
|
print_power_network_data(pos, api, netw_type, outdir)
|
|
end
|
|
elseif is_junction(pos, tlib2) then
|
|
netID = networks.get_netID(pos, 0)
|
|
if netID then
|
|
print("- " .. s .. ": Junction netwNum: " .. networks.netw_num(netID))
|
|
break
|
|
end
|
|
else
|
|
print("- " .. s .. ": Node has no '" .. netw_type .. "' netID!!!")
|
|
end
|
|
end
|
|
end
|
|
|
|
local function print_secondary_node(pos, api, netw_type)
|
|
local tlib2 = networks.registered_networks[api][netw_type]
|
|
if tlib2:is_secondary_node(pos) then
|
|
print("- Secondary node: true")
|
|
else
|
|
print("- Is no secondary node!!!")
|
|
end
|
|
end
|
|
|
|
local function print_valid_sides(name, api, netw_type)
|
|
local tlib2 = networks.registered_networks[api][netw_type]
|
|
local sides = tlib2.valid_node_contact_sides[name]
|
|
if sides then
|
|
print("- Valid node contact sides: " .. get_list(sides, ", "))
|
|
else
|
|
print("- Has no valid node contact sides!!!")
|
|
end
|
|
end
|
|
|
|
local function print_connected_nodes(pos, api, netw_type)
|
|
local tlib2 = networks.registered_networks[api][netw_type]
|
|
for outdir = 1,6 do
|
|
local destpos, indir = tlib2:get_connected_node_pos(pos, outdir)
|
|
if destpos and tlib2:connected(destpos) then
|
|
local s1 = tubelib2.dir_to_string(outdir)
|
|
local s2 = tubelib2.dir_to_string(indir)
|
|
local node = minetest.get_node(destpos)
|
|
print("- " .. s1 .. ": Node connected to " .. node.name .. " at " .. P2S(destpos) .. " from " .. s2)
|
|
end
|
|
end
|
|
end
|
|
|
|
-- debug print of node related data
|
|
local function debug_print(pos)
|
|
local node = minetest.get_node(pos)
|
|
local ndef = minetest.registered_nodes[node.name]
|
|
|
|
if not NetwTypes then
|
|
collect_netw_types()
|
|
end
|
|
|
|
if not ndef.networks then
|
|
print("No networks node!!!")
|
|
return
|
|
end
|
|
|
|
print("########## " .. node.name .. " ###########")
|
|
|
|
for netw_type,api in pairs(NetwTypes) do
|
|
if ndef.networks[netw_type] then
|
|
print_sides(pos, api, netw_type)
|
|
print_netID(pos, api, netw_type)
|
|
print_secondary_node(pos, api, netw_type)
|
|
print_valid_sides(node.name, api, netw_type)
|
|
print_connected_nodes(pos, api, netw_type)
|
|
end
|
|
end
|
|
|
|
print("#####################")
|
|
end
|
|
|
|
local function on_use(itemstack, placer, pointed_thing)
|
|
if pointed_thing.type == "node" then
|
|
local pos = pointed_thing.under
|
|
networks.register_observe_pos(pos)
|
|
if placer:get_player_control().sneak then
|
|
debug_print(pos)
|
|
else
|
|
debug_print(pos)
|
|
end
|
|
else
|
|
networks.register_observe_pos(nil)
|
|
end
|
|
end
|
|
|
|
local function on_place(itemstack, placer, pointed_thing)
|
|
if pointed_thing.type == "node" then
|
|
local pos = pointed_thing.under
|
|
networks.register_observe_pos(nil)
|
|
if placer:get_player_control().sneak then
|
|
debug_print(pos)
|
|
else
|
|
debug_print(pos)
|
|
end
|
|
else
|
|
networks.register_observe_pos(nil)
|
|
end
|
|
end
|
|
|
|
minetest.register_tool("networks:tool2", {
|
|
description = "Debugging Tool",
|
|
inventory_image = "networks_tool.png",
|
|
wield_image = "networks_tool.png",
|
|
use_texture_alpha = "clip",
|
|
groups = {cracky=1},
|
|
on_use = on_use,
|
|
on_place = on_place,
|
|
node_placement_prediction = "",
|
|
stack_max = 1,
|
|
})
|