## DamageContext — 伤害上下文数据类(必须单独放在此文件) ## 权威来源:implementation_plan.md §2.1 E-N2 P6-N49 ## 禁止将 class_name DamageContext 写入 damage_context_pool.gd! extends RefCounted class_name DamageContext var base_damage: float = 0.0 var mult: float = 1.0 var damage_type: int = 0 # DamageType.PHYSICAL var owner_id: int = -1 var source_tags: int = 0 var is_crit: bool = false var pierce_rate: float = 0.0 # 护甲穿透率 0.0~1.0 func reset() -> void: base_damage = 0.0 mult = 1.0 damage_type = 0 owner_id = -1 source_tags = 0 is_crit = false pierce_rate = 0.0 ## 伤害公式:((base_damage + add) × mult) × (1 − resistance) − armor ## S1 简化版:返回 base_damage * mult func calc_damage(armor: float = 0.0, resistance: float = 0.0) -> float: var effective_armor: float = armor * (1.0 - pierce_rate) return max(0.0, base_damage * mult * (1.0 - resistance) - effective_armor)