Модуль:Сущность/data: различия между версиями

Отмена версии 315901, сделанной Pok (обсуждение)
Метка: отмена
Нет описания правки
 
(не показано 7 промежуточных версий этого же участника)
Строка 2: Строка 2:
local getArgs = require('Module:Arguments').getArgs
local getArgs = require('Module:Arguments').getArgs
local JsonPaths = require('Module:JsonPaths')
local JsonPaths = require('Module:JsonPaths')
local dp = require( "Module:GetField")


local dpOk, dpModule = pcall(require, "Module:GetField")
local function load_data_page(page)
local dp = dpOk and dpModule or nil
    local moduleName = JsonPaths.get(page)
    local ok, data = pcall(mw.loadData, moduleName)
    if not ok or type(data) ~= "table" then
        return nil
    end
    return data
end


local switchModeRegistry = {}
local switchModeRegistry = {}
Строка 24: Строка 31:
         end
         end
     end
     end
end
local function load_module_data(page)
    local moduleName = JsonPaths.get(page)
    local ok, data = pcall(mw.loadData, moduleName)
    if not ok then
        return nil
    end
    return data
end
end


Строка 47: Строка 45:
end
end


local function lcfirst(s)
function p.loadEntityComponents(entityId)
     if not s or s == "" then return s end
     if not entityId or entityId == "" then
     return string.lower(s:sub(1, 1)) .. (s:sub(2) or "")
        return {}
    end
     local entity = dp.loadEntityData(entityId)
    if entity then
        return dp.collectEntityComponents(entity)
    end
    return {}
end
 
function p.entityHasComponent(entityOrId, compName)
    if not compName or compName == "" then
        return false
    end
 
    local entity
    if type(entityOrId) == "string" then
        entity = dp and dp.loadEntityData(entityOrId) or load_data_page("prototype/Entity/" .. entityOrId .. ".json")
        if not entity then
            return false
        end
    else
        entity = entityOrId
    end
 
    return dp.entityHasComponent(entity, compName)
end
end


Строка 100: Строка 122:
end
end


local function make_source(kind, name, pathName, tplPath)
local function make_source(kind, name, tplPath)
     return { kind = kind, name = name, pathName = pathName, tplPath = tplPath }
     return { kind = kind, name = name, tplPath = tplPath }
end
end


Строка 598: Строка 620:
end
end


local function collect_entity_sets(id, componentDefs, prototypeStoreDefs,
local function collect_entity_sets(id, prototypeStoreDefs, componentWhitelist, componentBlacklist, prototypeWhitelist, prototypeBlacklist)
                                  componentWhitelist, componentBlacklist, prototypeWhitelist, prototypeBlacklist)
     local foundComponents, foundPrototypes = {}, {}
     local foundComponents, foundPrototypes = {}, {}


     local compList = componentDefs[id]
     local compList = p.loadEntityComponents(id)
     if type(compList) == "table" then
     if type(compList) == "table" then
         for _, v in ipairs(compList) do
         for _, v in ipairs(compList) do
             if type(v) == "string" then
             if type(v) == "string" and v ~= "" then
                 foundComponents[v] = true
                 foundComponents[v] = true
             end
             end
Строка 611: Строка 632:
     end
     end


     each_csv_value(id, function(name)
     local protoStore = prototypeStoreDefs and prototypeStoreDefs[id]
         if name ~= id then
    if type(protoStore) == "table" then
             if componentDefs[name] ~= nil then
         for protoName in pairs(protoStore) do
                foundComponents[name] = true
             if type(protoName) == "string" and protoName ~= "" then
            elseif prototypeStoreDefs[name] ~= nil then
                 foundPrototypes[protoName] = true
                 foundPrototypes[name] = true
             end
             end
         end
         end
     end)
     end


     apply_entity_set_filters(foundComponents, parse_csv_set(componentWhitelist), parse_csv_set(componentBlacklist))
     apply_entity_set_filters(foundComponents, parse_csv_set(componentWhitelist), parse_csv_set(componentBlacklist))
Строка 749: Строка 769:
     local prototypeBlacklist = frame.args.prototypeBlacklist or frame.args.prototypeblacklist or ""
     local prototypeBlacklist = frame.args.prototypeBlacklist or frame.args.prototypeblacklist or ""


     local componentDefs = load_module_data("component.json")
     local prototypeStoreDefs = dp.loadCachedData("prototype_store.json")
    local prototypeStoreDefs = load_module_data("prototype_store.json")
     if not prototypeStoreDefs then
     if not componentDefs or not prototypeStoreDefs then
         return false
         return false
     end
     end


     local foundComponents, foundPrototypes = collect_entity_sets(id, componentDefs, prototypeStoreDefs,
     local foundComponents, foundPrototypes = collect_entity_sets(id, prototypeStoreDefs,
         componentWhitelist, componentBlacklist, prototypeWhitelist, prototypeBlacklist)
         componentWhitelist, componentBlacklist, prototypeWhitelist, prototypeBlacklist)


Строка 769: Строка 788:
     local whitelistSearchStrings = extract_whitelist_search_strings(keyFilter)
     local whitelistSearchStrings = extract_whitelist_search_strings(keyFilter)


    local function processEntity(kind, name, isStore)
local function processEntity(kind, name, isStore)
        local pathName = lcfirst(name)
local tplPath = kind .. "/" .. dp.ucfirst(name)
        local tplPath = kind .. "/" .. pathName
if isStore then
        if isStore then
tplPath = tplPath .. "/store"
            tplPath = tplPath .. "/store"
end
        end


         local content = load_template_content(tplPath)
         local content = load_template_content(tplPath)
Строка 796: Строка 814:
         local paramNames = get_template_params(tplPath, content)
         local paramNames = get_template_params(tplPath, content)
         if dp then
         if dp then
             local dataPage = tplPath .. ".json"
             local dataPage = kind .. "/" .. dp.ucfirst(name) .. ".json"
             extra = get_selective_extra(id, dataPage, paramNames)
             extra = get_selective_extra(id, dataPage, paramNames)
         end
         end
Строка 804: Строка 822:
             id = id,
             id = id,
             extra = extra,
             extra = extra,
             source = make_source(kind, name, pathName, tplPath),
             source = make_source(kind, name, tplPath),
             priority = resolve_priority(parsed)
             priority = resolve_priority(parsed)
         })
         })
Строка 820: Строка 838:
     end
     end


     local componentStoreDefs = load_module_data("component_store.json")
     local componentStoreDefs = dp.loadCachedData("component_store.json")
     if type(componentStoreDefs) == "table" and (not anyEntityWhitelist or compHasWhitelist) then
     if type(componentStoreDefs) == "table" and (not anyEntityWhitelist or compHasWhitelist) then
         local compStore = componentStoreDefs[id]
         local compStore = componentStoreDefs[id]
Строка 1010: Строка 1028:
         id = "",
         id = "",
         extra = "",
         extra = "",
         source = make_source("", tplPath, tplPath, tplPath),
         source = make_source("", tplPath, tplPath),
         priority = 1
         priority = 1
     }, nil, true)
     }, nil, true)