using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using BITKit; using System.IO; using UnityEngine.UIElements; namespace BITFALL { public class WorldItem : MonoBehaviour,IBasicItem,IDescription { #region 本地字段 [Header(Constant.Header.Settings)] [SerializeField]private AssetableItem asset; #endregion #region 接口实现 public int Id => GetInstanceID(); public string Name => asset.Name; public string Description => asset.Description; public ItemQuality Quality => asset.Quality; public string AddressablePath => asset.AddressablePath; private readonly Property property = new(); public bool Contains() => property.Contains(); public T GetOrAddProperty(Func addFactory) => property.GetOrAddProperty(addFactory); public T GetOrCreateProperty() => property.GetOrCreateProperty(); public object[] GetProperties() => property.GetProperties(); public bool TryGetProperty(out T value) => property.TryGetProperty(out value); public bool TryRemoveProperty() => property.TryRemoveProperty(); public bool TrySetProperty(T value) => property.TrySetProperty(value); public void Read(BinaryReader r) { throw new NotImplementedException(); } public void Write(BinaryWriter w) { throw new NotImplementedException(); } public bool CopyItemsFrom(IBasicItem item) { if(item is ManagedItem serializableItem) { asset = serializableItem.GetAssetable(); } return true; } public bool ClearProperties()=>property.ClearProperties(); public bool CopyPropertiesFrom(IPropertable propertable)=>property.CopyPropertiesFrom(propertable); #endregion #region 本地方法 public AssetableItem Assetable => asset; public ManagedItem Pick() { var managedItem = new ManagedItem(); managedItem.CopyItemsFrom(this); return managedItem; } public void Picked() { Destroy(gameObject); } #endregion } #if UNITY_EDITOR [UnityEditor.CustomEditor(typeof(WorldItem))] public class WorldItemInspector:BITInspector { public override VisualElement CreateInspectorGUI() { CreateSubTitle(Constant.Header.Data); var label = root.Create