BattleRelayReader.kt

package io.github.lishangbu.avalon.game.battle.engine.core.runtime.support

/**
 * battle runtime relay 的轻量 typed reader。
 *
 * 设计意图:
 * - 收口 action executor、flow phase、mutation interceptor 对 relay 的数值读取;
 * - 避免 `relay as? Number` 与字符串数值解析在执行链各处重复出现;
 * - 让 hook 改写后的 relay 在进入主链时有一致的宽松读取语义。
 */
object BattleRelayReader {
    fun readInt(relay: Any?): Int? =
        when (relay) {
            null -> null
            is Int -> relay
            is Number -> relay.toInt()
            is String -> relay.toIntOrNull()
            else -> null
        }

    fun readDouble(relay: Any?): Double? =
        when (relay) {
            null -> null
            is Double -> relay
            is Number -> relay.toDouble()
            is String -> relay.toDoubleOrNull()
            else -> null
        }
}