using ColdMint.scripts.utils; using Godot; namespace ColdMint.scripts.damage; /// /// Node representing the damage number /// 表示伤害数字的节点 /// public partial class DamageNumberNodeSpawn : Marker2D { private PackedScene? _damageNumberPackedScene; private Node2D? _rootNode; /// /// The vector in the negative direction /// 负方向的向量 /// private Vector2 _negativeVector; /// /// Vector in the positive direction /// 正方向的向量 /// private Vector2 _positiveVector; /// /// 物理渐变色 /// 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"); //The horizontal velocity is in the X positive direction //水平速度的X正方向 var horizontalVelocityPositiveDirection = Config.CellSize * Config.HorizontalSpeedOfDamageNumbers; //Horizontal velocity in the negative X direction //水平速度的X负方向 var horizontalVelocityNegativeDirection = -horizontalVelocityPositiveDirection; //vertical height //垂直高度 var verticalHeight = -Config.CellSize * Config.VerticalVelocityOfDamageNumbers; //Compute left and right vectors //计算左右向量 _negativeVector = new Vector2(horizontalVelocityNegativeDirection, verticalHeight); _positiveVector = new Vector2(horizontalVelocityPositiveDirection, verticalHeight); _physicalGradient = new Gradient(); //Physical color from OpenColor2 to OpenColor6 (red) //物理色 从OpenColor2 到 OpenColor6(红色) _physicalGradient.SetColor(0, new Color("#ffc9c9")); _physicalGradient.SetColor(1, new Color("#fa5252")); _magicGradient = new Gradient(); //Magic Color from OpenColor2 to OpenColor6(Purple) //魔法色 从OpenColor2 到 OpenColor6(紫色) _magicGradient.SetColor(0, new Color("#d0bfff")); _magicGradient.SetColor(1, new Color("#7950f2")); _defaultGradient = new Gradient(); //default behavior //默认行为 _defaultGradient.SetColor(0, new Color("#ff8787")); _defaultGradient.SetColor(1, new Color("#fa5252")); } /// /// Show damage /// 显示伤害 /// /// public void Display(DamageTemplate damageTemplate) { if (_rootNode == null || _damageNumberPackedScene == null) { return; } var damageNumber = NodeUtils.InstantiatePackedScene(_damageNumberPackedScene); if (damageNumber == null) { return; } if (_rootNode == null) { damageNumber.QueueFree(); return; } NodeUtils.CallDeferredAddChild(_rootNode, damageNumber); damageNumber.Position = GlobalPosition; if (damageTemplate.MoveLeft) { damageNumber.SetVelocity(_negativeVector); } else { damageNumber.SetVelocity(_positiveVector); } var damageLabel = damageNumber.GetNode