using System; using ColdMint.scripts.camp; using ColdMint.scripts.character; using ColdMint.scripts.damage; using ColdMint.scripts.debug; using ColdMint.scripts.inventory; using ColdMint.scripts.utils; using Godot; namespace ColdMint.scripts.pickable; /// /// Templates for all fallen objects /// 所有掉落物的模板 /// public partial class PickAbleTemplate : RigidBody2D, IItem { //Do not export this field because the ID is specified within yaml. //不要导出此字段,因为ID是在yaml内指定的。 public virtual string Id { get; set; } = "ID"; [Export] protected Texture2D? UniqueIcon { get; set; } public Texture2D Icon => UniqueIcon ?? ItemTypeManager.DefaultIconOf(Id); public new string Name { get { var key = $"item_{Id}"; return TranslationServerUtils.Translate(key) ?? key; } } public virtual bool CanPutInPack => true; /// /// Owner /// 主人 /// public new Node2D? Owner { get; set; } /// /// Enabled contact injury /// 启用接触伤害 /// public bool EnableContactInjury; [Export] private int _minContactInjury = 1; [Export] private int _maxContactInjury = 2; public string Description { get { var key = $"item_{Id}_desc"; return TranslationServerUtils.Translate(key) ?? key; } } public int Quantity { get; set; } = 1; /// /// The number of tile maps that come into contact with this item /// 与此物品接触的瓦片地图数量 /// private int _tileMapNumber; /// /// This area represents the collision range of the weapon, and when other nodes enter this area, they will deal damage. /// 这个区域表示武器的碰撞范围,当其他节点进入此区域时,会造成伤害。 /// private Area2D? _damageArea2D; /// /// Whether the item is currently picked up /// 当前物品是否被捡起了 /// public bool Picked { get; set; } public int MaxQuantity { get; set; } private Label? _tipLabel; public virtual void Use(Node2D? owner, Vector2 targetGlobalPosition) { } public override void _Ready() { _damageArea2D = GetNode("DamageArea2D"); _damageArea2D.BodyEntered += OnBodyEnter; _damageArea2D.BodyExited += OnBodyExited; _tipLabel = GetNodeOrNull