This commit is contained in:
CortexCore
2023-06-05 16:25:06 +08:00
parent 9027120bb8
commit 4565ff2e35
2947 changed files with 0 additions and 0 deletions

View File

@@ -0,0 +1,16 @@
{
"name": "BITKit.Item",
"rootNamespace": "",
"references": [
"GUID:14fe60d984bf9f84eac55c6ea033a8f4"
],
"includePlatforms": [],
"excludePlatforms": [],
"allowUnsafeCode": false,
"overrideReferences": false,
"precompiledReferences": [],
"autoReferenced": true,
"defineConstraints": [],
"versionDefines": [],
"noEngineReferences": true
}

145
Core/Item/Item.cs Normal file
View File

@@ -0,0 +1,145 @@
using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Linq;
namespace BITKit
{
#region
public enum ItemQuality
{
/// <summary>
/// 常见的
/// </summary>
Common,
/// <summary>
/// 罕见的
/// </summary>
Uncommon,
/// <summary>
/// 稀有的
/// </summary>
Rare,
/// <summary>
/// 史诗的
/// </summary>
Epic,
/// <summary>
/// 传奇的
/// </summary>
Legendary,
/// <summary>
/// 神话的
/// </summary>
Mythical,
/// <summary>
/// 开发者
/// </summary>
Develop,
}
#endregion
#region
/// <summary>
/// 基础物品
/// </summary>
public interface IBasicItem :IPropertable
{
/// <summary>
/// 唯一Id
/// </summary>
int Id { get; }
/// <summary>
/// 物品名,一般用于查找物品的主键
/// </summary>
string Name { get; }
/// <summary>
/// 可寻址路径,该路径用于查找物品
/// </summary>
string AdressablePath { get; }
/// <summary>
/// 物品描述
/// </summary>
string Description { get; }
/// <summary>
/// 物品品质
/// </summary>
ItemQuality Quality { get; }
bool CopyItemsFrom(IBasicItem item);
}
/// <summary>
/// 可配置化物品,通常用于配置
/// </summary>
public interface IAssetableItem: IBasicItem
{
}
#endregion
#region
/// <summary>
/// 可序列化的物品
/// </summary>
[Serializable]
public record SerializableItem : IBasicItem
{
#region
public int Id;
public string Name;
public string AdressablePath { get; set; }
public string Description;
public ItemQuality Quality;
/// <summary>
/// 本地属性
/// </summary>
Property property = new();
#endregion
#region
int IBasicItem.Id => Id;
string IBasicItem.Name => Name;
string IBasicItem.Description => Description;
ItemQuality IBasicItem.Quality => Quality;
#endregion
#region
public bool Contains<T>() => property.Contains<T>();
public T GetOrAddProperty<T>(Func<T> addFactory) => property.GetOrAddProperty<T>(addFactory);
public T GetOrCreateProperty<T>() => property.GetOrCreateProperty<T>();
public object[] GetProperties() => property.GetProperties();
public bool TryGetProperty<T>(out T value) => property.TryGetProperty<T>(out value);
public bool TryRemoveProperty<T>() => property.TryRemoveProperty<T>();
public bool TrySetProperty<T>(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)
{
Id=item.Id;
Name = item.Name;
AdressablePath = item.AdressablePath;
Description = item.Description;
Quality=item.Quality;
CopyPropertiesFrom(item);
return true;
}
public bool ClearProperties()=>property.ClearProperties();
public bool CopyPropertiesFrom(IPropertable propertable)
{
return property.CopyPropertiesFrom(propertable);
}
#endregion
}
#endregion
}

View File

@@ -0,0 +1,79 @@
using System;
using System.Collections;
using System.Collections.Generic;
namespace BITKit
{
/// <summary>
/// 支持二进制化的的物品容器,适用于网络化物品容器
/// 支持属性
/// 支持回调
/// </summary>
public interface IBasicItemContainer
{
/// <summary>
/// 物品容器的唯一Id
/// </summary>
int Id { get; }
/// <summary>
/// 尝试获取指定Item
/// </summary>
bool TryGetItem(Func<IBasicItem, bool> func, out IBasicItem item);
/// <summary>
/// 获取所有Item的只读副本
/// </summary>
IBasicItem[] GetItems();
/// <summary>
/// 添加物品的接口
/// </summary>
bool Add(IBasicItem item);
/// <summary>
/// 通过Item本身进行移除
/// </summary>
bool Remove(IBasicItem item);
/// <summary>
/// 通过Id移除物品(推荐)
/// </summary>
bool Remove(int id);
/// <summary>
/// 通过工厂方法移除物品
/// </summary>
bool Remove(Func<IBasicItem, bool> removeFactory);
/// <summary>
/// 通过通过Id丢下物品
/// </summary>
bool Drop(int Id);
/// <summary>
/// 注册添加物品的工厂方法,
/// </summary>
event Func<IBasicItem, bool> AddFactory;
/// <summary>
/// 注册移除物品的工厂方法
/// </summary>
event Func<IBasicItem, bool> RemoveFactory;
/// <summary>
/// 注册丢下物品的工厂方法
/// </summary>
event Func<IBasicItem, bool> DropFactory;
/// <summary>
/// 已添加Item的回调
/// </summary>
event Action<IBasicItem> OnAdd;
/// <summary>
/// 已移除Item的回调
/// </summary>
event Action<IBasicItem> OnRemove;
/// <summary>
/// 已设置Item的回调
/// </summary>
event Action<IBasicItem> OnSet;
/// <summary>
/// 已丢下Item的回调
/// </summary>
event Action<IBasicItem> OnDrop;
/// <summary>
/// 已重构Items的回调
/// </summary>
event Action<IBasicItemContainer> OnRebuild;
}
}