From 0c60d3f08f7f00ad73cfc5745be487ce32df65dc Mon Sep 17 00:00:00 2001 From: Joachim Stolberg Date: Sat, 5 Oct 2019 20:53:08 +0200 Subject: [PATCH] bugfixes for solar inverter and energy storage power distribution changed solar inverter in two nodes divided manuals revised --- .test/sink.lua | 34 +++++++++++++++++++++++++++------- manuals/api.md | 16 ++++++++++++++-- power/power2.lua | 40 ++++++++++++++++++++++++++++++++++++++++ 3 files changed, 81 insertions(+), 9 deletions(-) diff --git a/.test/sink.lua b/.test/sink.lua index 295ae00..b2ca429 100644 --- a/.test/sink.lua +++ b/.test/sink.lua @@ -55,6 +55,23 @@ local function on_rightclick(pos, node, clicker) end end +-- +-- Modul shows the usage of the power2 alternative function set +-- +local function after_place_node(pos) + local mem = tubelib2.init_mem(pos) + M(pos):set_string("infotext", "off") + techage.power.after_place_node(pos) +end + +local function after_dig_node(pos, oldnode) + techage.power.after_dig_node(pos, oldnode) + tubelib2.del_mem(pos) +end + +local function after_tube_update(node, pos, out_dir, peer_pos, peer_in_dir) + techage.power.after_tube_update2(node, pos, out_dir, peer_pos, peer_in_dir) +end minetest.register_node("techage:sink", { description = "Sink", @@ -62,6 +79,9 @@ minetest.register_node("techage:sink", { on_timer = node_timer, on_rightclick = on_rightclick, + after_place_node = after_place_node, + after_dig_node = after_dig_node, + after_tube_update = after_tube_update, paramtype = "light", light_source = 0, @@ -75,8 +95,12 @@ minetest.register_node("techage:sink", { minetest.register_node("techage:sink_on", { description = "Sink", tiles = {'techage_electric_button.png'}, + on_timer = node_timer, on_rightclick = on_rightclick, + after_place_node = after_place_node, + after_dig_node = after_dig_node, + after_tube_update = after_tube_update, paramtype = "light", light_source = minetest.LIGHT_MAX, @@ -89,13 +113,9 @@ minetest.register_node("techage:sink_on", { sounds = default.node_sound_wood_defaults(), }) -techage.power.register_node({"techage:sink", "techage:sink_on"}, { - power_network = Cable, +-- Alternative registration function +techage.power.enrich_node({"techage:sink", "techage:sink_on"}, { + power_network = Cable, on_power = on_power, on_nopower = on_nopower, - after_place_node = function(pos) - local mem = tubelib2.init_mem(pos) - M(pos):set_string("infotext", "off") - end, - }) diff --git a/manuals/api.md b/manuals/api.md index 89eb92b..f269db6 100644 --- a/manuals/api.md +++ b/manuals/api.md @@ -295,7 +295,7 @@ techage.power.register_node(names, { }) ``` -Durch die Registrierung des Nodes die obigen "after"-Funktionen einen Wrapper (Code nur symbolhaft): +Durch die Registrierung des Nodes werden die Knoten-eigenen `after_...` Funktionen überschrieben. Optional können deshalb eigene Funktionen bei `register_node` übergeben werden. ```lua -- after_place_node decorator @@ -331,6 +331,17 @@ Und es erfolgt eine Registrierung bei Tube: **Soll aber der Knoten außer Power auch Kommandos empfangen oder senden können, oder am Tubing teilnehmen, so müssen die `command` bezogenen Funktionen zusätzlich beachtet werden.** +### Alternative API + +Sollen die Knoten-eigenen `after_...` Funktionen nicht überschrieben, so bietet sich folgende, alternative API an: + +```lua +techage.power.enrich_node(names, pwr_def) +techage.power.after_place_node(pos) +techage.power.after_dig_node(pos, oldnode) +techage.power.after_tube_update2(node, pos, out_dir, peer_pos, peer_in_dir) +``` + ### `power`/`power2` API ```lua @@ -359,10 +370,11 @@ techage.power.secondary_start(pos, mem, available, needed) techage.power.secondary_stop(pos, mem) techage.power.secondary_alive(pos, mem, capa_curr, capa_max) -techage.power.power_accounting(pos, mem) --> {network data...} (used by terminal) +techage.power.power_accounting(pos, mem) --> {network data...} (used by info tool) techage.power.get_power(start_pos) --> sum (used by solar cells) techage.power.power_network_available(start_pos) --> bool (used by TES generator) techage.power.mark_nodes(name, start_pos) -- used by debugging tool +techage.power.limited_connection_walk(pos, clbk) --> num_nodes (used by terminal) ``` ## Klasse `NodeStates` diff --git a/power/power2.lua b/power/power2.lua index 7d1582c..6da7dd7 100644 --- a/power/power2.lua +++ b/power/power2.lua @@ -154,6 +154,46 @@ function techage.power.register_node(names, pwr_def) end end + +-- +-- API function set for nodes, which don't (what to) call techage.power.register_node() +-- +function techage.power.enrich_node(names, pwr_def) + for _,name in ipairs(names) do + minetest.override_item(name, { + power = { + conn_sides = pwr_def.conn_sides or {"L", "R", "U", "D", "F", "B"}, + on_power = pwr_def.on_power, + on_nopower = pwr_def.on_nopower, + on_getpower = pwr_def.on_getpower, + power_network = pwr_def.power_network, + } + }) + pwr_def.power_network:add_secondary_node_names({name}) + end +end + +function techage.power.after_place_node(pos) + local pwr = PWR(pos) + set_conn_dirs(pos, pwr.conn_sides) + pwr.power_network:after_place_node(pos) +end + +function techage.power.after_dig_node(pos, oldnode) + local pwr = PWRN(oldnode) + pwr.power_network:after_dig_node(pos) +end + +function techage.power.after_tube_update2(node, pos, out_dir, peer_pos, peer_in_dir) + local pwr = PWR(pos) + local mem = tubelib2.get_mem(pos) + add_connection(mem, pos, out_dir, peer_pos, peer_in_dir, pwr) +end + +-- +-- Further helper functions +-- + -- Called from tubelib2 via Cable:register_on_tube_update() -- For all kind of nodes, used as cable filler/grout function techage.power.after_tube_update(node, pos, out_dir, peer_pos, peer_in_dir, power)