ta4_chest and display improvements
This commit is contained in:
parent
867227dbfd
commit
59a0a3248e
@ -27,6 +27,18 @@ local function gen_inv(nvm)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
local function repair_inv(nvm)
|
||||||
|
nvm.inventory = nvm.inventory or {}
|
||||||
|
for i = 1,8 do
|
||||||
|
local item = nvm.inventory[i]
|
||||||
|
if not item or type(item) ~= "table"
|
||||||
|
or not item.name or type(item.name) ~= "string"
|
||||||
|
or not item.count or type(item.count) ~= "number" then
|
||||||
|
nvm.inventory[i] = {name = "", count = 0}
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
local function get_stack(nvm, idx)
|
local function get_stack(nvm, idx)
|
||||||
nvm.inventory = nvm.inventory or {}
|
nvm.inventory = nvm.inventory or {}
|
||||||
if nvm.inventory[idx] then
|
if nvm.inventory[idx] then
|
||||||
@ -91,13 +103,13 @@ local function get_stacksize(pos)
|
|||||||
end
|
end
|
||||||
|
|
||||||
-- Sort the items into the nvm inventory
|
-- Sort the items into the nvm inventory
|
||||||
-- If the nvm inventry is full, the items are stored in the main inventory
|
local function sort_in(pos, nvm, stack)
|
||||||
-- If the main inventory is also full, false is returned
|
local old_counts = {}
|
||||||
local function sort_in(pos, inv, nvm, stack)
|
local orig_count = stack:get_count()
|
||||||
if inv:is_empty("main") then -- the main inv is used for the case the nvm-inventory is full
|
for idx,item in ipairs(nvm.inventory or {}) do
|
||||||
for _,item in ipairs(nvm.inventory or {}) do
|
|
||||||
if item.name and (item.name == "" or item.name == stack:get_name()) then
|
if item.name and (item.name == "" or item.name == stack:get_name()) then
|
||||||
local count = math.min(stack:get_count(), get_stacksize(pos) - item.count)
|
local count = math.min(stack:get_count(), get_stacksize(pos) - item.count)
|
||||||
|
old_counts[idx] = item.count -- store old value
|
||||||
item.count = item.count + count
|
item.count = item.count + count
|
||||||
item.name = stack:get_name()
|
item.name = stack:get_name()
|
||||||
stack:set_count(stack:get_count() - count)
|
stack:set_count(stack:get_count() - count)
|
||||||
@ -106,9 +118,11 @@ local function sort_in(pos, inv, nvm, stack)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
inv:add_item("main", stack)
|
-- restore old values
|
||||||
return true
|
for idx,cnt in pairs(old_counts) do
|
||||||
|
nvm.inventory[idx].count = cnt
|
||||||
end
|
end
|
||||||
|
stack:set_count(orig_count)
|
||||||
return false
|
return false
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -124,21 +138,10 @@ local function move_items_to_stack(item, stack, num)
|
|||||||
return stack
|
return stack
|
||||||
end
|
end
|
||||||
|
|
||||||
local function get_item(pos, inv, nvm, item_name, count)
|
local function get_item(pos, nvm, item_name, count)
|
||||||
local stack = {count = 0}
|
local stack = {count = 0}
|
||||||
nvm.inventory = nvm.inventory or {}
|
nvm.inventory = nvm.inventory or {}
|
||||||
|
|
||||||
if not inv:is_empty("main") then
|
|
||||||
if item_name then
|
|
||||||
local taken = inv:remove_item("main", {name = item_name, count = count})
|
|
||||||
if taken:get_count() > 0 then
|
|
||||||
return taken
|
|
||||||
end
|
|
||||||
else
|
|
||||||
return techage.get_items(pos, inv, "main", count)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
if item_name then
|
if item_name then
|
||||||
-- Take specified items from the chest
|
-- Take specified items from the chest
|
||||||
for _,item in ipairs(nvm.inventory) do
|
for _,item in ipairs(nvm.inventory) do
|
||||||
@ -327,6 +330,8 @@ end
|
|||||||
|
|
||||||
local function on_rightclick(pos, node, clicker)
|
local function on_rightclick(pos, node, clicker)
|
||||||
if M(pos):get_int("disabled") ~= 1 then
|
if M(pos):get_int("disabled") ~= 1 then
|
||||||
|
local nvm = techage.get_nvm(pos)
|
||||||
|
repair_inv(nvm)
|
||||||
M(pos):set_string("formspec", formspec(pos))
|
M(pos):set_string("formspec", formspec(pos))
|
||||||
techage.set_activeformspec(pos, clicker)
|
techage.set_activeformspec(pos, clicker)
|
||||||
end
|
end
|
||||||
@ -482,8 +487,7 @@ minetest.register_node("techage:ta4_chest_dummy", {
|
|||||||
techage.register_node({"techage:ta4_chest"}, {
|
techage.register_node({"techage:ta4_chest"}, {
|
||||||
on_pull_item = function(pos, in_dir, num, item_name)
|
on_pull_item = function(pos, in_dir, num, item_name)
|
||||||
local nvm = techage.get_nvm(pos)
|
local nvm = techage.get_nvm(pos)
|
||||||
local inv = M(pos):get_inventory()
|
local res = get_item(pos, nvm, item_name, num)
|
||||||
local res = get_item(pos, inv, nvm, item_name, num)
|
|
||||||
if techage.is_activeformspec(pos) then
|
if techage.is_activeformspec(pos) then
|
||||||
M(pos):set_string("formspec", formspec(pos))
|
M(pos):set_string("formspec", formspec(pos))
|
||||||
end
|
end
|
||||||
@ -491,8 +495,7 @@ techage.register_node({"techage:ta4_chest"}, {
|
|||||||
end,
|
end,
|
||||||
on_push_item = function(pos, in_dir, stack)
|
on_push_item = function(pos, in_dir, stack)
|
||||||
local nvm = techage.get_nvm(pos)
|
local nvm = techage.get_nvm(pos)
|
||||||
local inv = M(pos):get_inventory()
|
local res = sort_in(pos, nvm, stack)
|
||||||
local res = sort_in(pos, inv, nvm, stack)
|
|
||||||
if techage.is_activeformspec(pos) then
|
if techage.is_activeformspec(pos) then
|
||||||
M(pos):set_string("formspec", formspec(pos))
|
M(pos):set_string("formspec", formspec(pos))
|
||||||
end
|
end
|
||||||
@ -500,8 +503,7 @@ techage.register_node({"techage:ta4_chest"}, {
|
|||||||
end,
|
end,
|
||||||
on_unpull_item = function(pos, in_dir, stack)
|
on_unpull_item = function(pos, in_dir, stack)
|
||||||
local nvm = techage.get_nvm(pos)
|
local nvm = techage.get_nvm(pos)
|
||||||
local inv = M(pos):get_inventory()
|
local res = sort_in(pos, nvm, stack)
|
||||||
local res = sort_in(pos, inv, nvm, stack)
|
|
||||||
if techage.is_activeformspec(pos) then
|
if techage.is_activeformspec(pos) then
|
||||||
M(pos):set_string("formspec", formspec(pos))
|
M(pos):set_string("formspec", formspec(pos))
|
||||||
end
|
end
|
||||||
|
@ -1349,9 +1349,7 @@ techage.manual_DE.aText = {
|
|||||||
"\n",
|
"\n",
|
||||||
"Die TA4 8x2000 Kiste hat kein normales Inventar wir andere Kisten\\, sondern verfügt über 8 Speicher\\, wobei jeder Speicher bis zu 2000 Items einer Sorte aufnehmen kann. Über die orangefarbenen Taster können Items in den Speicher verschoben bzw. wieder heraus geholt werden. Die Kiste kann auch wie sonst üblich mit einem Schieber (TA2\\, TA3 oder TA4) gefüllt bzw. geleert werden.\n"..
|
"Die TA4 8x2000 Kiste hat kein normales Inventar wir andere Kisten\\, sondern verfügt über 8 Speicher\\, wobei jeder Speicher bis zu 2000 Items einer Sorte aufnehmen kann. Über die orangefarbenen Taster können Items in den Speicher verschoben bzw. wieder heraus geholt werden. Die Kiste kann auch wie sonst üblich mit einem Schieber (TA2\\, TA3 oder TA4) gefüllt bzw. geleert werden.\n"..
|
||||||
"\n"..
|
"\n"..
|
||||||
"Wird die Kiste mit einem Schieber gefüllt\\, so füllen sich alle Speicherplätze von links nach rechts. Sind alle 8 Speicher voll und können keine weiteren Items hinzugefügt werden\\, so werden diese Items im Ein-/Ausgabe-Inventar gespeichert. Die Kiste ist damit für den Schieberbetrieb vollständig gefüllt und weitere Items werden abgewiesen.\n"..
|
"Wird die Kiste mit einem Schieber gefüllt\\, so füllen sich alle Speicherplätze von links nach rechts. Sind alle 8 Speicher voll und können keine weiteren Items hinzugefügt werden\\, so werden weitere Items werden abgewiesen.\n"..
|
||||||
"\n"..
|
|
||||||
"Wird die Kiste über einen Schieber geleert\\, werden von Speicherplätzen Items entnommen.\n"..
|
|
||||||
"\n"..
|
"\n"..
|
||||||
"*Reihenfunktion*\n"..
|
"*Reihenfunktion*\n"..
|
||||||
"\n"..
|
"\n"..
|
||||||
|
@ -16,11 +16,25 @@ local NUM_ROWS = 5
|
|||||||
local RADIUS = 6
|
local RADIUS = 6
|
||||||
local Param2ToFacedir = {[0] = 0, 0, 3, 1, 2, 0}
|
local Param2ToFacedir = {[0] = 0, 0, 3, 1, 2, 0}
|
||||||
|
|
||||||
|
local function lcdlib_bugfix(text_tbl)
|
||||||
|
if text_tbl and next(text_tbl) then
|
||||||
|
local t = {}
|
||||||
|
for _,txt in ipairs(text_tbl) do
|
||||||
|
if txt == "" then
|
||||||
|
t[#t+1] = " "
|
||||||
|
else
|
||||||
|
t[#t+1] = txt
|
||||||
|
end
|
||||||
|
end
|
||||||
|
return table.concat(t, "\n")
|
||||||
|
end
|
||||||
|
return ""
|
||||||
|
end
|
||||||
|
|
||||||
local function display_update(pos, objref)
|
local function display_update(pos, objref)
|
||||||
pos = vector.round(pos)
|
pos = vector.round(pos)
|
||||||
local nvm = techage.get_nvm(pos)
|
local nvm = techage.get_nvm(pos)
|
||||||
nvm.text = nvm.text or {""}
|
local text = lcdlib_bugfix(nvm.text)
|
||||||
local text = table.concat(nvm.text, "\n")
|
|
||||||
local texture = lcdlib.make_multiline_texture(
|
local texture = lcdlib.make_multiline_texture(
|
||||||
"default", text,
|
"default", text,
|
||||||
70, 70, NUM_ROWS, "top", "#000")
|
70, 70, NUM_ROWS, "top", "#000")
|
||||||
@ -31,8 +45,7 @@ end
|
|||||||
local function display_updateXL(pos, objref)
|
local function display_updateXL(pos, objref)
|
||||||
pos = vector.round(pos)
|
pos = vector.round(pos)
|
||||||
local nvm = techage.get_nvm(pos)
|
local nvm = techage.get_nvm(pos)
|
||||||
nvm.text = nvm.text or {""}
|
local text = lcdlib_bugfix(nvm.text)
|
||||||
local text = table.concat(nvm.text, "\n")
|
|
||||||
local texture = lcdlib.make_multiline_texture(
|
local texture = lcdlib.make_multiline_texture(
|
||||||
"default", text,
|
"default", text,
|
||||||
126, 70, NUM_ROWS, "top", "#000")
|
126, 70, NUM_ROWS, "top", "#000")
|
||||||
@ -175,7 +188,7 @@ minetest.register_craft({
|
|||||||
local function add_line(pos, payload, cycle_time)
|
local function add_line(pos, payload, cycle_time)
|
||||||
local nvm = techage.get_nvm(pos)
|
local nvm = techage.get_nvm(pos)
|
||||||
local mem = techage.get_mem(pos)
|
local mem = techage.get_mem(pos)
|
||||||
nvm.text = nvm.text or {""}
|
nvm.text = nvm.text or {}
|
||||||
mem.ticks = mem.ticks or 0
|
mem.ticks = mem.ticks or 0
|
||||||
local str = tostring(payload) or "oops"
|
local str = tostring(payload) or "oops"
|
||||||
|
|
||||||
@ -192,7 +205,7 @@ end
|
|||||||
local function write_row(pos, payload, cycle_time)
|
local function write_row(pos, payload, cycle_time)
|
||||||
local nvm = techage.get_nvm(pos)
|
local nvm = techage.get_nvm(pos)
|
||||||
local mem = techage.get_mem(pos)
|
local mem = techage.get_mem(pos)
|
||||||
nvm.text = nvm.text or {""}
|
nvm.text = nvm.text or {}
|
||||||
mem.ticks = mem.ticks or 0
|
mem.ticks = mem.ticks or 0
|
||||||
local str = tostring(payload.str) or "oops"
|
local str = tostring(payload.str) or "oops"
|
||||||
local row = tonumber(payload.row) or 1
|
local row = tonumber(payload.row) or 1
|
||||||
@ -209,7 +222,7 @@ local function write_row(pos, payload, cycle_time)
|
|||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
while #nvm.text <= row do
|
while #nvm.text < row do
|
||||||
table.insert(nvm.text, "")
|
table.insert(nvm.text, "")
|
||||||
end
|
end
|
||||||
nvm.text[row] = str
|
nvm.text[row] = str
|
||||||
@ -224,7 +237,7 @@ local function clear_screen(pos, cycle_time)
|
|||||||
mem.ticks = cycle_time
|
mem.ticks = cycle_time
|
||||||
end
|
end
|
||||||
|
|
||||||
nvm.text = {""}
|
nvm.text = {}
|
||||||
end
|
end
|
||||||
|
|
||||||
techage.register_node({"techage:ta4_display"}, {
|
techage.register_node({"techage:ta4_display"}, {
|
||||||
|
@ -520,9 +520,7 @@ Die Funktion entspricht der von TA3. Die Kiste kann aber mehr Inhalt aufnehmen.
|
|||||||
|
|
||||||
Die TA4 8x2000 Kiste hat kein normales Inventar wir andere Kisten, sondern verfügt über 8 Speicher, wobei jeder Speicher bis zu 2000 Items einer Sorte aufnehmen kann. Über die orangefarbenen Taster können Items in den Speicher verschoben bzw. wieder heraus geholt werden. Die Kiste kann auch wie sonst üblich mit einem Schieber (TA2, TA3 oder TA4) gefüllt bzw. geleert werden.
|
Die TA4 8x2000 Kiste hat kein normales Inventar wir andere Kisten, sondern verfügt über 8 Speicher, wobei jeder Speicher bis zu 2000 Items einer Sorte aufnehmen kann. Über die orangefarbenen Taster können Items in den Speicher verschoben bzw. wieder heraus geholt werden. Die Kiste kann auch wie sonst üblich mit einem Schieber (TA2, TA3 oder TA4) gefüllt bzw. geleert werden.
|
||||||
|
|
||||||
Wird die Kiste mit einem Schieber gefüllt, so füllen sich alle Speicherplätze von links nach rechts. Sind alle 8 Speicher voll und können keine weiteren Items hinzugefügt werden, so werden diese Items im Ein-/Ausgabe-Inventar gespeichert. Die Kiste ist damit für den Schieberbetrieb vollständig gefüllt und weitere Items werden abgewiesen.
|
Wird die Kiste mit einem Schieber gefüllt, so füllen sich alle Speicherplätze von links nach rechts. Sind alle 8 Speicher voll und können keine weiteren Items hinzugefügt werden, so werden weitere Items werden abgewiesen.
|
||||||
|
|
||||||
Wird die Kiste über einen Schieber geleert, werden von Speicherplätzen Items entnommen.
|
|
||||||
|
|
||||||
**Reihenfunktion**
|
**Reihenfunktion**
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user