techage/icta_controller/condition.lua

85 lines
2.0 KiB
Lua

--[[
TechAge
=======
Copyright (C) 2019-2020 Joachim Stolberg
AGPL v3
See LICENSE.txt for more information
ICTA Controller - Condition Registration
]]--
-- for lazy programmers
local M = minetest.get_meta
local S = techage.S
local logic = techage.logic
-- tables with all data from condition registrations
local kvRegisteredCond = {}
-- list of keys for conditions
local aCondTypes = {}
-- list of titles for conditions
local aCondTitles = {}
--
-- API functions for condition registrations
--
function techage.icta_register_condition(key, tData)
table.insert(aCondTypes, key)
table.insert(aCondTitles, tData.title)
if kvRegisteredCond[key] ~= nil then
print("[Techage] Condition registration error "..key)
return
end
kvRegisteredCond[key] = tData
for _,item in ipairs(tData.formspec) do
if item.type == "textlist" then
item.tChoices = string.split(item.choices, ",")
item.num_choices = #item.tChoices
end
end
end
-- return formspec string
function techage.cond_formspec(row, kvSelect)
return techage.submenu_generate_formspec(
row, "cond", "Condition type", aCondTypes, aCondTitles, kvRegisteredCond, kvSelect)
end
-- evaluate the row condition input
-- and return new data
function techage.cond_eval_input(kvSelect, fields)
kvSelect = techage.submenu_eval_input(kvRegisteredCond, aCondTypes, aCondTitles, kvSelect, fields)
return kvSelect
end
-- return the Lua code
function techage.code_condition(kvSelect, environ)
if kvSelect and kvRegisteredCond[kvSelect.choice] then
if techage.submenu_verify(environ.owner, kvRegisteredCond, kvSelect) then
return kvRegisteredCond[kvSelect.choice].code(kvSelect, environ)
end
end
return nil, nil
end
techage.icta_register_condition("default", {
title = "",
formspec = {},
code = function(data, environ)
local condition = function(env, idx)
return false
end
local result = function(val)
return false
end
return condition, result
end,
button = function(data, environ) return "..." end,
})