using System;
using Godot;
namespace ColdMint.scripts.damage;
///
/// DamageTemplate
/// 伤害模板
///
public abstract class DamageTemplate
{
///
/// Damage must be assigned a certain value
/// 伤害必须指定确定的数值
///
public int Damage => _damage;
///
/// Critical Hit probability (unit: percent)
/// 暴击几率(单位:百分比)
///
public int CriticalStrikeProbability = 5;
private int _damage;
private bool _isCriticalStrike;
///
///
/// 攻击者
///
public Node2D? Attacker { get; set; }
///
/// Whether the damage text moves to the left
/// 伤害文本是否向左移动
///
public bool MoveLeft { get; set; }
///
/// Create actual damage with maximum and minimum values
/// 通过最大值和最小值创建实际伤害
///
public void CreateDamage()
{
_damage = GD.RandRange(MinDamage, MaxDamage);
_isCriticalStrike = GD.RandRange(1, 100) <= CriticalStrikeProbability;
if (_isCriticalStrike)
{
_damage = (int)Math.Round(_damage * Config.CriticalHitMultiplier);
}
}
///
/// Maximum injury
/// 最大伤害
///
public int MaxDamage { get; set; }
///
/// Minimum damage value
/// 最小伤害值
///
public int MinDamage { get; set; }
///
/// Whether the damage is critical
/// 本次伤害是否为暴击
///
public bool IsCriticalStrike => _isCriticalStrike;
///
/// Types of damage
/// 伤害的类型
///
public int Type { get; set; }
///
/// An event performed before harming the enemy
/// 在伤害敌人之前执行的事件
///
public Action? BeforeDamage;
///
/// After damaging the enemy
/// 在伤害敌人之后
///
public Action? AfterDamage;
}