using Godot; namespace ColdMint.scripts.damage; /// /// Node representing the damage number /// 表示伤害数字的节点 /// public partial class DamageNumberNodeSpawn : Marker2D { private PackedScene? _damageNumberPackedScene; private Node2D? _rootNode; /// /// The horizontal velocity is in the X positive direction /// 水平速度的X正方向 /// private int _horizontalVelocityPositiveDirection; /// /// Horizontal velocity in the negative X direction /// 水平速度的X负方向 /// private int _horizontalVelocityNegativeDirection; /// /// vertical height /// 垂直高度 /// private int _verticalHeight; /// /// 物理渐变色 /// physical Gradient /// private Gradient? _physicalGradient; /// /// 魔法渐变色 /// magic Gradient /// private Gradient? _magicGradient; /// /// 默认渐变色 /// default Gradient /// private Gradient? _defaultGradient; public override void _Ready() { base._Ready(); _damageNumberPackedScene = GD.Load("res://prefab/ui/DamageNumber.tscn") as PackedScene; _rootNode = GetNode("/root/Game/DamageNumberContainer"); _horizontalVelocityPositiveDirection = Config.CellSize * Config.HorizontalSpeedOfDamageNumbers; _horizontalVelocityNegativeDirection = -_horizontalVelocityPositiveDirection; _verticalHeight = -Config.CellSize * Config.VerticalVelocityOfDamageNumbers; _physicalGradient = new Gradient(); //物理色 从OpenColor2 到 OpenColor6(红色) _physicalGradient.SetColor(0, new Color("#ffc9c9")); _physicalGradient.SetColor(1, new Color("#fa5252")); _magicGradient = new Gradient(); //魔法色 从OpenColor2 到 OpenColor6(紫色) _magicGradient.SetColor(0, new Color("#d0bfff")); _magicGradient.SetColor(1, new Color("#7950f2")); _defaultGradient = new Gradient(); //默认行为 _defaultGradient.SetColor(0, new Color("#ff8787")); _defaultGradient.SetColor(1, new Color("#fa5252")); } /// /// Added a damage digital node /// 添加伤害数字节点 /// /// private void AddDamageNumberNode(Node2D damageNumber) { _rootNode?.AddChild(damageNumber); } /// /// Show damage /// 显示伤害 /// /// public void Display(DamageTemplate damageTemplate) { if (_damageNumberPackedScene == null) { return; } if (_damageNumberPackedScene.Instantiate() is not DamageNumber damageNumber) { return; } CallDeferred("AddDamageNumberNode", damageNumber); damageNumber.Position = GlobalPosition; if (damageTemplate.MoveLeft) { damageNumber.SetVelocity(new Vector2(_horizontalVelocityNegativeDirection, _verticalHeight)); } else { damageNumber.SetVelocity(new Vector2(_horizontalVelocityPositiveDirection, _verticalHeight)); } var damageLabel = damageNumber.GetNode