EffectDefinition.kt
package io.github.lishangbu.avalon.game.battle.engine.core.dsl
import io.github.lishangbu.avalon.game.battle.engine.core.type.EffectKindId
import io.github.lishangbu.avalon.game.battle.engine.core.type.HookName
import io.github.lishangbu.avalon.game.battle.engine.core.type.SpecialHandlerId
/**
* Effect 的统一数据定义。
*
* 设计意图:
* - 用统一结构承载招式、特性、状态、天气等 effect 数据。
* - 作为 JSON 数据加载后的核心内存表示。
*
* @property id effect 唯一标识。
* @property kind effect 所属类别,例如 move、ability。
* @property name effect 展示名称。
* @property tags 用于筛选或条件判断的标签集合。
* @property data 不属于 Hook 的静态元数据。
* @property hooks 该 effect 挂载的 hook 规则集合。
* @property specialHandler 可选的特例处理器标识。
*/
data class EffectDefinition(
val id: String,
val kind: EffectKindId,
val name: String,
val tags: Set<String> = emptySet(),
val data: Map<String, Any?> = emptyMap(),
val hooks: Map<HookName, List<HookRule>> = emptyMap(),
val specialHandler: SpecialHandlerId? = null,
)