✨ Item magnet
This commit is contained in:
		| @@ -9,10 +9,12 @@ public partial class ItemPickup : Node2D | |||||||
|     [Export] public string ItemId { get; set; } = ""; |     [Export] public string ItemId { get; set; } = ""; | ||||||
|     [Export] public int Quantity { get; set; } = 1; |     [Export] public int Quantity { get; set; } = 1; | ||||||
|     [Export] public bool Infinite { get; set; } = false; |     [Export] public bool Infinite { get; set; } = false; | ||||||
|  |     [Export] public float MagnetRange { get; set; } = 64f; | ||||||
|  |  | ||||||
|     private Sprite2D _sprite; |     private Sprite2D _sprite; | ||||||
|     private Label _quantityLabel; |     private Label _quantityLabel; | ||||||
|     private Sprite2D _shadowSprite; |     private Sprite2D _shadowSprite; | ||||||
|  |     private Node2D _playerTarget; | ||||||
|  |  | ||||||
|     // Called when the node enters the scene tree |     // Called when the node enters the scene tree | ||||||
|     public override void _Ready() |     public override void _Ready() | ||||||
| @@ -53,6 +55,23 @@ public partial class ItemPickup : Node2D | |||||||
|             _shadowSprite.ZIndex = _sprite.ZIndex - 1; |             _shadowSprite.ZIndex = _sprite.ZIndex - 1; | ||||||
|             AddChild(_shadowSprite); |             AddChild(_shadowSprite); | ||||||
|         } |         } | ||||||
|  |  | ||||||
|  |         _playerTarget = GetTree().GetFirstNodeInGroup(PickupGroupName) as Node2D; | ||||||
|  |         if (_playerTarget == null) | ||||||
|  |             _playerTarget = GetTree().GetFirstNodeInGroup("Player") as Node2D; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public override void _Process(double delta) | ||||||
|  |     { | ||||||
|  |         if (_playerTarget != null) | ||||||
|  |         { | ||||||
|  |             var distance = Position.DistanceTo(_playerTarget.Position); | ||||||
|  |             if (distance <= MagnetRange) | ||||||
|  |             { | ||||||
|  |                 float speed = 10f; | ||||||
|  |                 Position = Position.Lerp(_playerTarget.Position, (float)delta * speed); | ||||||
|  |             } | ||||||
|  |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     private void UpdateTexture() |     private void UpdateTexture() | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user