diff --git a/README.md b/README.md index 302bfd0..2089167 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,6 @@ -# Deconstruction +

Deconstruction

+ + 发布页面 ## 简介 @@ -150,7 +152,9 @@ XericLibrary 部分由两个dll组成,一个是 Xeric Library,另一个是 X #### 曲线宏 #### 枚举宏 -枚举宏包含一个缓存封装器, +枚举宏包含一个缓存封装器,可以通过MacroEnum\来定义。 +定义枚举结构封装将允许像列表一样访问这个枚举,或将枚举实例赋予,通过枚举封装器来操作枚举值。 +在新版中,枚举封装器可以使用单例写法访问,而不再需要手动声名保存实例了。 #### 方程宏 #### 事件宏 @@ -159,6 +163,53 @@ XericLibrary 部分由两个dll组成,一个是 Xeric Library,另一个是 X #### 按键宏 #### 集合宏 #### 数学宏 +#### 消息库 + +预设一些消息处理流程。 + +* 全局业务分发器,消息入口Entry。 + + 特点是需要通过指定消息入口(RedirectReceiverMessage)和出口(RedirectReceiver)来中转消息。 + 完成后消息发送时会被进行一次包装,将带有入口名称的内容一同发送;而在消息处理的另一端,也需要用相同的逻辑处理这个包,就能获得这个包来自哪,并自动定位到对应的预定义委托上进行处理。 + 下面是一个接收示例: + ``` + // 声名一个消息处理器委托 + // 接收器形参可以是任何可以序列化的结构,或是无形参接收器。 + public MacroMessage.ReceiverObject myFunc; + public void Awake() + { + // 初始化函数中注册这个委托,并赋予一个名称用于标识 + myFunc.RedirectReceiver(nameof(myFunc)); + myFunc += Func; + } + // 处理消息 + public void Func(int number) + { + // 消息处理 + } + ``` + 下面是一个发送示例: + ``` + // 在收到文本消息后,立刻发送给重定向器 + void OnMessage(string message) + { + MacroMessage.RedirectReceiverMessage(message); + } + ``` + 最后,需要定义何时处理消息: + ``` + // 比如放在帧更新事件中,消息会作为队列加入,然后逐个处理。 + void Update() + { + MacroMessage.MainThreadProcessingMessage(); + } + ``` + +* 方法封装器 + 提供一个方法软引用封装器,首先需要将一个可执行流程转换为CallableTarget对象。然后通过AddCallableFunction添加到全局字典中,随后可以通过TryEvocation或者Evocation调用。 + 方法封装器默认可以搜索所有静态,实例,私有,公共的方法 + + #### 对象宏 #### PID宏 #### 对象池宏 @@ -175,7 +226,8 @@ XericLibrary 部分由两个dll组成,一个是 Xeric Library,另一个是 X #### 平滑宏 #### 排序宏 -c#自带的排序很好用,但是选择何种排序模式是自动进行的,排序宏中提供了可以手动选择的排序算法。 +c#自带的排序很好用,但是选择何种排序模式是根据数据类型自动切换的。 +在这里,排序宏中提供了一些可以手动选择的排序算法。 注:没有猴子排序。 #### 文本宏 @@ -195,6 +247,24 @@ c#自带的排序很好用,但是选择何种排序模式是自动进行的, TextBlockBuilder 是所有blocker的基类,使用它包裹所有文本将起到单纯拼接文本的作用;TextBlockBuilder 里的三个block的作用是使用相应的富文本标签包裹,根据标签的类型,包裹器会自动决定标签格式。 DelegateBlock的作用是通过委托来实时获取一个变量,示例中直接获取value的文本值,拼接到结果中。 TextBlockBuilder 可以不依靠如DelegateBlock这样的包裹器,可以直接将返回字符串类型的方法委托传入,blocker 会自动识别;前提是开启对应 blocker 里的compatibility兼容性检查,但这会带来额外的性能开销,如果没有特别的需求,建议还是使用DelegateBlock进行多态封装,这样也会更安全。 + + 在新的更新中,包裹器支持大括号写法,同时可以省略部分参数: + ``` + _blockBuilder = new TextBlockBuilder() + { + new ColorBlock() + { + "重量" + }, + new DelegateBlock(() => value.ToString()), + new SizeBlock(20) + { + "kg" + } + }; + ``` + 这里的作用与上面的示例完全一致,更新的包裹器中支持自动填入更多的默认值了,比如颜色默认为白色。 + * 文本转换:自动值转换为文本。 * NumberToChinese:将数值转为中文大写。 * 沃格纳费舍尔拼写检查器:检查一对或多对文本是否相似,返回最相似的文本序列,及相似度。 @@ -313,7 +383,7 @@ TimeStamp用于隐式的,在极短时间内(小于1tick)的时间戳的名 ### 基础使用 -数据库操作的指令被抽象到Order类了(我在注释里会称为解释器),比如sqlClient就是sqlcOrder,其中sqlc代表sqlclient。 +数据库操作的指令被抽象到Order类了(注释里会称为解释器),比如sqlClient就是sqlcOrder,其中sqlc代表sqlclient。 order类本质上是一个文本拼接器,为了方便管理,你可以使用对应类的order.GetOrder来获取池中的一条指令,比如: ``` var orderValues = SQLCHelper.GetOrder(); diff --git a/Runtime/XericLibrary.dll b/Runtime/XericLibrary.dll index 64883a0..b7af012 100644 Binary files a/Runtime/XericLibrary.dll and b/Runtime/XericLibrary.dll differ