跳转至

通用策略注册表

GFPolicyProviderGFPolicyRegistry 用于把一组可复用策略挂到通用 artifact 字典上。它适合资源导入预检、构建产物治理、编辑器工具质量规则、内容包审查或项目自定义数据检查;GF 只负责 provider 注册、artifact kind 匹配、优先级排序和结果汇总。

典型流程

Provider 声明自己支持的 artifact kind,并在 _evaluate_policy() 中返回策略结果。返回空字典表示通过;返回非空字典时,注册表会补齐 provider_idartifact_kindissuesdata 和 metadata。

class TextureSizePolicy:
    extends GFPolicyProvider

    func _init() -> void:
        provider_id = &"texture_size"
        supported_artifact_kinds = PackedStringArray(["resource"])
        priority = 10

    func _evaluate_policy(artifact: Dictionary, _context: Dictionary) -> Dictionary:
        if int(artifact.get("width", 0)) <= 2048:
            return {}
        return make_result(false, &"failed", artifact, [
            {
                "severity": "warning",
                "kind": "large_texture",
                "message": "Texture is larger than the project policy.",
            },
        ])
var registry := GFPolicyRegistry.new()
registry.register_provider(TextureSizePolicy.new())

var result := registry.evaluate_artifact({
    "kind": "resource",
    "path": "res://art/title.png",
    "width": 4096,
})

evaluate_artifact() 返回 okprovider_countresult_countresultsissues 和输入 artifact 副本。项目工具可以把 issues 继续交给 GFValidationReportDictionary、诊断面板或 CI 输出。

使用边界

策略注册表不解释 artifact 字段,也不规定某类资源或构建产物应该有哪些业务规则。需要稳定 schema 时,项目可以在 provider 的 input_schemaoutput_schema 或 metadata 中声明,再由自己的工具读取。

Provider 应保持可重复、可测试,优先返回结构化问题而不是直接写文件、弹窗或修改项目。真正的修复、迁移、导入和发布动作应放在调用方工具链里,由策略结果驱动。