39 lines
1.7 KiB
GDScript
39 lines
1.7 KiB
GDScript
## VERTICAL SLICE - NOT FOR PRODUCTION
|
||
## 难度修饰表 schema:按 (level_index, node_depth) 精确匹配施加乘数的类型化读取(空表=零行为合法态)。
|
||
## Boss 数值走行值直填不经本表;乘数越域仅告警、使用时 clamp(组合事故不作配置事故拒载)。
|
||
class_name DifficultyTable
|
||
extends Resource
|
||
|
||
@export var rows: Array[Dictionary] = [] # Array[Dictionary]:{level_index, node_depth, hp_mult, atk_mult}
|
||
|
||
const MULT_MIN := 0.1
|
||
const MULT_MAX := 10.0
|
||
|
||
|
||
func validate() -> Array:
|
||
var errs: Array[Dictionary] = []
|
||
var seen := {}
|
||
for row in rows:
|
||
var L: int = int(row.get("level_index", 0))
|
||
var D: int = int(row.get("node_depth", -1))
|
||
var key := "%d_%d" % [L, D]
|
||
if seen.has(key):
|
||
errs.append({"category": "dup_key", "message": "DifficultyTable 键重复: %s" % key})
|
||
seen[key] = true
|
||
if L < 1 or D < 0:
|
||
errs.append({"category": "domain", "message": "难度键越域 (%d,%d)" % [L, D]})
|
||
# 乘数越域 = warning 级(使用时 clamp——组合事故非配置事故,难度曲线与Boss GDD Edge Case 预登记)
|
||
for k in ["hp_mult", "atk_mult"]:
|
||
var v: float = float(row.get(k, 1.0))
|
||
if v < MULT_MIN or v > MULT_MAX:
|
||
errs.append({"category": "mult_oor_warning", "message": "%s (%s) 越域 [0.1,10] 使用时 clamp: %f" % [key, k, v]})
|
||
return errs
|
||
|
||
|
||
var _resolver # R1 解析协作件(ConfigDB load_tables 装配段注入——resolver 文件与键零搬移)
|
||
|
||
|
||
## 难度修饰解析委托(消费面 db.run.difficulty.resolve_modifiers——clamp 语义归 ConfigDbResolver)
|
||
func resolve_modifiers(L: int, D: int) -> Dictionary:
|
||
return _resolver.run.difficulty.resolve_modifiers(L, D)
|