techage/icta_controller/condition.lua

85 lines
2.0 KiB
Lua
Raw Normal View History

2020-02-29 21:20:54 +03:00
--[[
TechAge
=======
Copyright (C) 2019-2020 Joachim Stolberg
2020-10-19 20:09:17 +03:00
AGPL v3
2020-02-29 21:20:54 +03:00
See LICENSE.txt for more information
2022-01-03 23:40:31 +03:00
2020-02-29 21:20:54 +03:00
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)
2022-01-03 23:40:31 +03:00
end
2020-02-29 21:20:54 +03:00
-- 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
2022-01-03 23:40:31 +03:00
-- return the Lua code
2020-02-29 21:20:54 +03:00
function techage.code_condition(kvSelect, environ)
if kvSelect and kvRegisteredCond[kvSelect.choice] then
2020-03-01 14:32:11 +03:00
if techage.submenu_verify(environ.owner, kvRegisteredCond, kvSelect) then
2020-02-29 21:20:54 +03:00
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,
2020-02-29 21:20:54 +03:00
button = function(data, environ) return "..." end,
})