Compare commits

..

399 Commits

Author SHA1 Message Date
Alex-Rachel
eaccfdad5b #156 初始化资源包支持直接初始化Otherpackage,单机可以这样,热更项目建议修改Procedure
#156 初始化资源包支持直接初始化Otherpackage,单机可以这样,热更项目建议修改Procedure
2025-07-30 23:40:22 +08:00
ALEX
b6fbdf1d22 Merge pull request #171 from Alex-Rachel/obfuz
support Obfuz
2025-07-30 23:14:10 +08:00
Alex-Rachel
e2de2ba994 Define Symbols for obfuz 2025-07-30 23:11:58 +08:00
Alex-Rachel
3b68cb1519 Update BattleMainUI.cs 2025-07-30 23:09:13 +08:00
Alex-Rachel
be12d1024a Update ScriptGenerator.cs 2025-07-30 23:09:03 +08:00
Alex-Rachel
55ffdf4edb Update GameApp.cs 2025-07-30 23:08:45 +08:00
Alex-Rachel
511619cb71 Update obfuz version 2025-07-30 23:00:47 +08:00
ALEX
5b8793de40 Merge pull request #169 from tpxxn/main
fix 打图集工具对有子图的图片只会打第一张子图的问题
2025-07-28 12:18:52 +08:00
tpxxn
9c9079c55b fix 打图集工具对有子图的图片只会打第一张子图的问题 2025-07-28 12:13:25 +08:00
Alex-Rachel
c8482799c5 接入obfuz->3.0 2025-07-26 18:16:16 +08:00
Alex-Rachel
cb86d8868e 接入obfuz->2.0 2025-07-26 08:10:41 +08:00
ALEX
f2c7ff4336 Merge pull request #165 from KMUS1997/patch-1
Update LauncherMgr.cs
2025-07-10 13:09:51 +08:00
KMUS1997
c18cdacdbb Update LauncherMgr.cs
// 解决秘之Bug,如果你旋转了UI相机会导致 界面也跟着旋转
2025-07-09 23:56:58 +08:00
Alex-Rachel
b18298cbd9 Update Hybridclr 7.6.0->8.3.0 2025-07-08 23:04:21 +08:00
Alex-Rachel
86b1ff5d7b Update YooAsset 2.3.8 -> 2.3.12 2025-07-08 23:02:24 +08:00
Alex-Rachel
71eb698038 Debugger Add ObjectPoolInfomationWindow 2025-07-07 19:33:52 +08:00
Alex-Rachel
57c08d4e92 Update ReleaseTools.cs 2025-07-07 12:05:07 +08:00
ALEX
45f5bf3dc7 Merge pull request #164 from Eatjune/Local
Update SceneModule.cs
2025-07-02 23:22:03 +08:00
Eatjune
7a86b80c2b Update SceneModule.cs
修复无法异步加载 挂起的场景
2025-07-02 20:12:26 +08:00
ALEX
07fb31cc1c Merge pull request #163 from XiaoBojun/TE_EGamePlay
Tween:新增MaterialColor
2025-06-28 00:17:09 +08:00
xiaobo
4a1f2b52f6 Tween:新增MaterialColor 2025-06-26 14:23:14 +08:00
Alex-Rachel
aee8a4a3dc Update GameEvent.cs 2025-06-18 23:20:04 +08:00
ALEX
7621ba4b4a Merge pull request #162 from XiaoBojun/main
一键打包ab包新增,UpdateSetting新增
2025-06-16 13:02:05 +08:00
xiaobo
53e16dc1ff Aot补充UnityEngine.CoreModule.dll 2025-06-16 12:47:48 +08:00
xiaobo
e26a2937a7 1:一键打包ab包:新增快捷键,暂定f8。自动生成dll,打包资源,自动将项目的StreamingAssets复制到打包后的StreamingAssets文件夹下
2:UpdateSetting
(1)新增webgl设置,选择访问远程还是StreamingAssets
(2)构建资源设置:是否自动复制资源包到打包地址;打包地址如:../../Builds/Unity_Data/StreamingAssets,支持绝对路径和相对路径
2025-06-16 11:39:50 +08:00
ALEX
e7344db57d Merge pull request #160 from SaberArtoriaFan/main
[Fix] 修复namespace 缺失
2025-06-11 18:46:20 +08:00
Saber
8ab792b778 [Fix] 修复namespace 缺失 2025-06-11 17:35:15 +08:00
ALEX
d6917f28b7 Merge pull request #159 from tpxxn/main
SetSpriteExtension 回调
2025-06-11 16:29:16 +08:00
tpxxn
9aef4d4081 SetSpriteExtension 回调 2025-06-11 11:16:25 +08:00
Alex-Rachel
7d1de6e9a3 Update AssetsReference.cs 2025-06-05 16:07:38 +08:00
ALEX
9e0e762a39 Merge pull request #158 from liang530/main
AssetsReference的自动销毁计数处理完善,兼容unity Instantiate和不可见对象
2025-06-05 16:06:11 +08:00
liang
ad2bde9259 AssetsReference的自动销毁计数处理完善,兼容unity Instantiate和不可见对象 2025-06-05 15:30:44 +08:00
Alex-Rachel
cb8f15ad88 #157 AssetsReference的自动销毁计数处理
#157 AssetsReference的自动销毁计数处理
2025-06-05 11:13:21 +08:00
ALEX
b4639fcbdc Update README.md 2025-06-03 11:11:08 +08:00
Alex-Rachel
cc9002fe9a F10快捷键 TEngine/查找资产引用
F10快捷键 TEngine/查找资产引用
2025-05-26 19:24:33 +08:00
ALEX
e64926a66a Merge pull request #155 from Molth/main
添加引用分析
2025-05-26 19:16:57 +08:00
Molth Nevin
32c1edd0a5 添加引用分析 2025-05-26 15:07:50 +08:00
ALEX
c6f1508e84 Merge pull request #154 from XiaoBojun/main
toolbar拓展布局自适应优化,以及场景切换分组:初始场景、默认包、其他场景。
2025-05-26 14:10:33 +08:00
XiaoBojun
1f129118a7 toolbar拓展布局自适应优化,以及场景切换分组:初始场景、默认包、其他场景。 2025-05-26 12:16:46 +08:00
ALEX
6dac7b44a6 Update README.md 2025-05-25 23:37:25 +08:00
ALEX
2e8d181bed Update README.md 2025-05-25 23:36:56 +08:00
Alex-Rachel
b42daa035e Update AssetsReference.cs 2025-05-20 18:00:49 +08:00
Alex-Rachel
e7b07dfea2 AssetsReference支持Unity实例化接口GameObject.Instantiate
AssetsReference支持Unity实例化接口GameObject.Instantiate
2025-05-20 12:54:15 +08:00
ALEX
62c05e7c2b Merge pull request #149 from 6ag/main
移除luban生成脚本在Mac环境中的无效命令
2025-05-19 22:46:52 +08:00
feng
4c4a882b21 移除luban生成脚本在Mac环境中的无效命令 2025-05-19 22:40:28 +08:00
Alex-Rachel
58d7847079 Update TEngine.Runtime.asmdef 2025-05-16 23:33:32 +08:00
Alex-Rachel
724f52bbab Update TEngine.Runtime.asmdef 2025-05-16 23:24:36 +08:00
Alex-Rachel
0b409436a0 一键打包需要支持SBP构建内置着色器资源包
一键打包需要支持SBP构建内置着色器资源包
2025-05-13 12:36:58 +08:00
Alex-Rachel
cc799ce426 Update YooAsset
Update YooAsset
2025-05-10 20:58:24 +08:00
Alex-Rachel
35a9729930 Update SceneSwitcher.cs.meta 2025-05-10 20:55:29 +08:00
Alex-Rachel
0e34c99398 Remove
Remove
2025-05-10 19:25:59 +08:00
Alex-Rachel
240da47fc3 移除LoadSubAssetsSync 2025-05-10 19:25:26 +08:00
ALEX
04109a43b6 Merge pull request #148 from tpxxn/main
fix ExternalTypeUtil namespace
2025-05-09 14:15:44 +08:00
tpxxn
bc82685ec7 fix ExternalTypeUtil namespace 2025-05-09 13:51:47 +08:00
Alex-Rachel
1894cd4d72 Extension for LoadSubSprite
Extension for LoadSubSprite
2025-05-07 12:53:27 +08:00
ALEX
4c903e8da5 Merge pull request #147 from tpxxn/main
refactor AtlasMakerEditor & luban gen code code.lineEnding=crlf &  luban Vector ExternalTypeUtil
2025-05-06 17:22:30 +08:00
tpxxn
03aabf6b08 luban Vector ExternalTypeUtil 2025-05-06 14:15:20 +08:00
tpxxn
c1d9fe5ca7 luban gen code code.lineEnding=crlf 2025-05-06 14:02:24 +08:00
tpxxn
122b5b27ad refactor AtlasMakerEditor 2025-05-06 13:58:02 +08:00
ALEX
9a8de43e95 Merge pull request #145 from lvshiling/main
Fix currentPath DirectorySeparatorChar
2025-05-03 12:13:31 +08:00
lvshiling
06d826d4b2 Fix currentPath DirectorySeparatorChar 2025-04-30 11:42:38 +08:00
ALEX
afd0c6a24e Merge pull request #143 from 6ag/main
修正UIWindow中用于记录UI隐藏的IsHide字段在HideUI时赋值又被覆盖的问题
2025-04-28 18:39:21 +08:00
ALEX
7f9dddaec0 Merge pull request #144 from tpxxn/main
fix GenerateAtlas -> LoadValidSprites
2025-04-28 18:39:09 +08:00
tpxxn
d97538481e fix GenerateAtlas -> LoadValidSprites 2025-04-28 16:14:05 +08:00
feng
c72ef8e197 修正UIWindow中用于记录UI隐藏的IsHide字段在HideUI时赋值又被覆盖的问题 2025-04-28 09:14:14 +08:00
ALEX
7c9393051c Merge pull request #142 from Vorik-S/main
UIModule关闭的倒计时应该先进行判断原计时器是否销毁,避免多次Hide导致计时器多次添加
2025-04-27 17:29:09 +08:00
沈挺
e4c3247546 UIModule关闭的倒计时应该先进行判断原计时器是否销毁,避免多次Hide导致计时器多次添加 2025-04-27 14:08:15 +08:00
Alex-Rachel
6e9d23b2dc WEBGL下的文件系统初始化修正 2025-04-22 16:43:06 +08:00
Alex-Rachel
eae827a600 WEBGL下的remoteServices初始化修正(资源路径走HostServer)
WEBGL下的remoteServices初始化修正(资源路径走HostServer)
2025-04-22 14:25:31 +08:00
Alex-Rachel
f916adb71b 更新YooAsset 2.3.7 -> 2.3.8
更新YooAsset 2.3.7 -> 2.3.8
2025-04-18 00:16:29 +08:00
Alex-Rachel
227283864f 更新YooAsset 2.3.3 -> 2.3.7 优化YooAsset.RuntimeExtension以及YooAsset.EditorExtension目录结构
更新YooAsset 2.3.3 -> 2.3.7 优化YooAsset.RuntimeExtension以及YooAsset.EditorExtension目录结构
2025-04-17 12:59:23 +08:00
Alex-Rachel
32418326b1 Update ProcedureInitResources.cs 2025-03-28 17:43:17 +08:00
Alex-Rachel
6570f87074 Create SceneSwitcher.cs.meta 2025-03-26 21:10:45 +08:00
ALEX
81b00ae913 Merge pull request #135 from XiaoBojun/main
修改工具栏切换场景布局
2025-03-26 20:58:56 +08:00
XiaoBojun
322aaa0a46 Merge branch 'main' of https://github.com/XiaoBojun/TEngine
# Conflicts:
#	UnityProject/Assets/Editor/ToolbarExtender/Custom/SceneSwitcher/Editor/SceneSwitcher.cs   resolved by main version
2025-03-26 00:30:17 +08:00
XiaoBojun
8f5b1b2117 修改工具栏切换场景布局 2025-03-26 00:23:18 +08:00
Alex-Rachel
54a4c55f3c Remove SceneSwitcher 2025-03-25 23:40:10 +08:00
Alex-Rachel
e37c066f9f 简化流程,支持非强制更新,移除冗余UpdateMainFest与UpdateVersion的流程,因为Yoo统一了编辑器单机和联网的流程了。
简化流程,支持非强制更新,移除冗余UpdateMainFest与UpdateVersion的流程,因为Yoo统一了编辑器单机和联网的流程了。
2025-03-25 19:10:39 +08:00
Alex-Rachel
b1d06ecef5 Update Singleton.cs 2025-03-25 19:09:01 +08:00
Alex-Rachel
27ce7e8ecc Update UpdateSettingEditor.cs 2025-03-25 16:39:14 +08:00
Alex-Rachel
8b715ffc8e 新增Setting面板设置
新增Setting面板设置
2025-03-24 19:11:51 +08:00
Alex-Rachel
e8fa910f1f Main logic assembly missing Tips. 2025-03-24 18:49:42 +08:00
Alex-Rachel
3b3bc7822a Update SceneModule.cs 2025-03-24 17:28:22 +08:00
Alex-Rachel
3c662e489e UpdateSetting Editor不限定路径
UpdateSetting Editor不限定路径
2025-03-24 09:26:26 +08:00
Alex-Rachel
5cebc82ba1 TweenHelper
TweenHelper
2025-03-23 21:06:05 +08:00
Alex-Rachel
5cb72e0b08 Update ResourceExtComponent.Resource.cs 2025-03-23 12:36:41 +08:00
Alex-Rachel
500e012f2e Update TEngine.Runtime.asmdef 2025-03-23 01:08:39 +08:00
Alex-Rachel
82332ba5b4 Utility.Unity.FindObjectOfType 2025-03-23 00:26:33 +08:00
Alex-Rachel
55a6ab1ffb Update Utility.Tween.cs 2025-03-23 00:18:04 +08:00
Alex-Rachel
24313b61ab Utility.Unity Unity6下过时API修正 2025-03-21 20:26:24 +08:00
Alex-Rachel
876b36b3b9 LocalizationTools支持Unity6
LocalizationTools支持Unity6
2025-03-21 20:26:03 +08:00
Alex-Rachel
2a62a1f320 AOT补充元数据默认增加UniTask与YooAsset 2025-03-21 13:20:04 +08:00
Alex-Rachel
b6e6c1c423 AOT补充元数据默认增加UniTask与YooAsset
AOT补充元数据默认增加UniTask与YooAsset
2025-03-21 13:19:27 +08:00
Alex-Rachel
230f6a0be5 Update UpdateSettingEditor.cs 2025-03-21 13:18:56 +08:00
Alex-Rachel
25ca5f3f2b Update BuildDLLCommand.cs 2025-03-21 13:18:51 +08:00
Alex-Rachel
66c5a41be5 增加ENABLE_HYBRIDCLR的宏支持
增加ENABLE_HYBRIDCLR的宏支持
2025-03-21 10:26:12 +08:00
ALEX
61ba472346 Merge pull request #130 from Wkeasy/main
添加重启流程接口
2025-03-21 00:07:49 +08:00
Alex-Rachel
9ce4fb9d88 默认不校验CRC,CRC影响AB加载的速度 2025-03-20 15:12:19 +08:00
Wkeasy
e405236d4d 添加重启流程接口 2025-03-20 14:54:15 +08:00
Alex-Rachel
2e27941755 同步GameApp、Procedure里简化IUpdateDriver的调用 2025-03-20 11:53:35 +08:00
Alex-Rachel
14bbb993f8 YooAsset Extension程序集 因为MIniGame的FileSystem是写死了这个程序集
YooAsset Extension程序集 因为MIniGame的FileSystem是写死了这个程序集
2025-03-20 10:29:49 +08:00
ALEX
0ba9d1a8b7 Merge pull request #129 from 6ag/main
UI脚本生成,区分UIWidget和UIWindow
2025-03-20 00:06:31 +08:00
feng
2818edb575 UI脚本生成,区分UIWidget和UIWindow 2025-03-19 22:04:10 +08:00
Alex-Rachel
5210c1d36b ToolbarExtender
ToolbarExtender
2025-03-19 21:12:28 +08:00
Alex-Rachel
cdc7a8f688 Update SourceGenerator 忽略除了默认程序集的生成
Update SourceGenerator 忽略除了默认程序集的生成
2025-03-19 20:18:09 +08:00
Alex-Rachel
c20f8285d8 Update ResourceModule.Services.cs 2025-03-19 12:55:52 +08:00
Alex-Rachel
f2a63978da 增加MiniGameFileSystem的支持,增加EncryptType的解密枚举类型,以及ResourceModule解密方法实现
增加MiniGameFileSystem的支持,增加EncryptType的解密枚举类型,以及ResourceModule解密方法实现
2025-03-19 12:40:13 +08:00
Alex-Rachel
36db2f3aba 增加UnLoadAsync, 调整LoadSceneAsync的命名,增加_handlingScene当前正在处理的Scene保护
增加UnLoadAsync, 调整LoadSceneAsync的命名,增加_handlingScene当前正在处理的Scene保护
2025-03-19 09:30:27 +08:00
Alex-Rachel
61b2baeaf7 LocalizationUtility 命名规范 2025-03-18 22:34:43 +08:00
ALEX
7aab91215c Merge pull request #128 from 6ag/main
脚本自动生成增加Toggle
2025-03-18 19:31:55 +08:00
feng
4ae417337b 脚本自动生成增加Toggle 2025-03-18 18:56:37 +08:00
Alex-Rachel
52ac77d5e4 SceneModule增加UniTask的LoadScene方法 2025-03-18 14:39:08 +08:00
Alex-Rachel
515d55e19a Update UpdateSettingEditor.cs 2025-03-18 14:37:24 +08:00
Alex-Rachel
a4221e36f8 HotUpdateAssemblies 剔除.dll后缀
HotUpdateAssemblies 剔除.dll后缀
2025-03-18 13:46:32 +08:00
Alex-Rachel
58cecd2071 Update UpdateSettingEditor.cs 2025-03-18 00:36:34 +08:00
Alex-Rachel
81a794cff3 Update Utility.Http.cs 2025-03-18 00:24:54 +08:00
Alex-Rachel
5e6d98764c Update GameModule.cs 2025-03-18 00:21:56 +08:00
Alex-Rachel
385de69cb9 规范化LocalizationModule 2025-03-18 00:20:44 +08:00
Alex-Rachel
b68a5a84b9 自动同步UpdateSetting到HybridCLRSetting 2025-03-17 18:51:52 +08:00
Alex-Rachel
8ede4c7faa 增加DisStripCode防止裁剪组件 2025-03-17 18:28:26 +08:00
Alex-Rachel
f4d89bb420 EmitHelper动态方法不支持IL2CPP 2025-03-17 17:31:42 +08:00
Alex-Rachel
202df9ff62 GetUIAsyncAwait CancellationToken nullable 2025-03-17 14:11:11 +08:00
Alex-Rachel
e4989425e8 优化Activator.CreateInstance, 已知类型优先使用new 代替反射,其次使用EmitHelper。耗时对比:直接new 1,EmitHelper 3, Activator 10。 2025-03-17 12:01:25 +08:00
ALEX
a7b6d6f478 Merge pull request #126 from tpxxn/main
ShellHelper 在 Unity 输出 Log
2025-03-17 02:51:52 +08:00
tpxxn
db3fd11cb2 ShellHelper 在 Unity 输出 Log 2025-03-17 00:23:27 +08:00
Alex-Rachel
a2fe29af24 GameApp #pragma warning disable CS0436 2025-03-16 23:47:28 +08:00
Alex-Rachel
bf92b4d568 GameApp #pragma warning disable CS0436 2025-03-16 23:46:33 +08:00
Alex-Rachel
b060057c36 合理化目录结构,UIScriptGenerator、AssetBundleCollector挪到Assets/Editor目录下方便用户自行修改。 2025-03-16 18:41:49 +08:00
Alex-Rachel
9bffcce30e UIScriptGenerator 2025-03-15 00:42:23 +08:00
Alex-Rachel
be3b6eb8f2 newtonsoftJson 2025-03-14 23:41:13 +08:00
ALEX
a61d8bd668 Merge pull request #125 from yuliuren/main
Atlas工具增加2021版本支持
2025-03-14 20:16:50 +08:00
陈思海
fae2afd3c8 Atlas工具增加2021版本支持
目前支持2021.x  ~ 6000.x
2025-03-14 19:56:05 +08:00
ALEX
a309cd2f98 Merge pull request #124 from yuliuren/main
新增Altas图集编辑器
2025-03-14 16:15:26 +08:00
陈思海
3dc478c509 modify
修改初次报错
2025-03-14 16:00:05 +08:00
陈思海
c728dc4c0f 新增Altas图集编辑器
增加可视化定制化的路径配置
增加图集冗余机制判断 自动更新自动移除冗余依赖图集
增加各平台打包图集设定
增加V2和v1图集切换打包 ps:新旧想用哪个都行
2025-03-14 15:52:23 +08:00
Alex-Rachel
e9d6c27006 ShowUIAsyncAwait 2025-03-13 19:46:14 +08:00
Alex-Rachel
33bdcbd913 Update SpritePostprocessor.cs 2025-03-13 10:30:16 +08:00
Alex-Rachel
ac236e4b6a Merge branch 'main' of https://github.com/Alex-Rachel/TEngine 2025-03-13 10:27:22 +08:00
Alex-Rachel
d6f5e65ab4 规范化protected的Fields 命名规范。
protected一定程度上与private类似,外部无法访问。
2025-03-13 10:27:16 +08:00
ALEX
95412017e3 Merge pull request #122 from 6ag/main
SpritePostprocessor回退,已注释新版内容
2025-03-12 20:59:04 +08:00
feng
07f02acb1e 整理SpritePostprocessor图集打包脚本 2025-03-12 20:57:42 +08:00
feng
c03170e860 SpritePostprocessor回退,已注释新版内容 2025-03-12 20:52:03 +08:00
Alex-Rachel
aa5dc9dcb4 Update GameEntry.cs 2025-03-12 18:46:08 +08:00
ALEX
53665f669c Merge pull request #120 from 6ag/main
修复Image/SpriteRenderer设置Sprite时,类型转换错误
2025-03-12 17:34:52 +08:00
feng
91403615bc 修复Image/SpriteRenderer设置Sprite时,类型转换错误 2025-03-12 17:32:37 +08:00
ALEX
77b2fdceb8 Merge pull request #119 from 6ag/main
给UIModule中UI摄像机赋值
2025-03-12 16:50:05 +08:00
feng
7b7b14a8c3 给UIModule中UI摄像机赋值 2025-03-12 16:39:44 +08:00
ALEX
c7f3511bd3 Merge pull request #118 from 6ag/main
设置图片支持CancellationToken取消
2025-03-12 14:32:01 +08:00
Alex-Rachel
e089aead36 Update ProcedureInitResources.cs 2025-03-12 14:31:21 +08:00
feng
d169b62fc5 设置图片支持CancellationToken取消 2025-03-12 14:26:38 +08:00
Alex-Rachel
ab10c587f8 Fixed AudioSetting.asset 2025-03-12 13:18:38 +08:00
Alex-Rachel
bbeecb2855 LanguageModule And Procedure InitLanguage 2025-03-12 13:18:21 +08:00
Alex-Rachel
39c9d327a1 Update BattleMainUI.prefab 2025-03-12 13:17:06 +08:00
Alex-Rachel
50c72fb341 Update README.md 2025-03-12 12:13:58 +08:00
Alex-Rachel
b0c357bba2 Change the TestEvent 2025-03-12 12:13:51 +08:00
Alex-Rachel
6a1ea3d9b8 Update UpdateSetting.cs 2025-03-12 12:13:31 +08:00
Alex-Rachel
6a6caebcff Update GameEvent.cs 2025-03-12 12:13:21 +08:00
Alex-Rachel
e3bf57f485 Update ResourceModule.cs 2025-03-12 12:13:05 +08:00
Alex-Rachel
77d07e175a LubanTools支持 2025-03-12 11:40:05 +08:00
Alex-Rachel
106d90da4d 整理Attribute CodeStype 2025-03-10 00:20:22 +08:00
ALEX
dd471eed08 Merge pull request #116 from tpxxn/main
const 变量名
2025-03-09 08:18:25 +08:00
tpxxn
f32e5e79a3 const 变量名 2025-03-09 02:33:14 +08:00
Alex-Rachel
4c325f7ca6 Update MainScene 2025-03-08 22:51:28 +08:00
Alex-Rachel
d11b6e628e Update HostMode Procedure 2025-03-08 21:21:25 +08:00
Alex-Rachel
5e568b203b HybridCLR BuildDLLCommond 2025-03-08 21:03:18 +08:00
Alex-Rachel
5bb168a958 Rmv 2025-03-08 19:44:33 +08:00
Alex-Rachel
6cf5aa46c1 统一命名规范private变量_filedInfo 2025-03-08 19:44:06 +08:00
Alex-Rachel
9b72cbcb7c ProjectSettings 2025-03-08 18:38:40 +08:00
Alex-Rachel
32fbb971e7 Utility.Http 2025-03-08 14:18:35 +08:00
Alex-Rachel
d6d2f66902 Utility.PlayerPref 2025-03-08 14:05:41 +08:00
Alex-Rachel
4a1876897c Utility.Unity 2025-03-08 13:46:35 +08:00
Alex-Rachel
551727687f TEngine 6 2025-03-07 23:09:46 +08:00
Alex-Rachel
aad8ff3ee5 忽略Gizmos和编辑器资源 source:9bc0577423 2025-01-24 12:59:31 +08:00
Alex-Rachel
df25a1adad Update ResourceExtComponent.Resource.cs
typo
2025-01-22 09:27:42 +08:00
Alex-Rachel
634a392a1f Update HybridCLR -> 7.3.0
Update HybridCLR -> 7.3.0
2025-01-15 23:54:31 +08:00
Alex-Rachel
b869a05220 #104 目前调用 HideUI 会将 UIWindow 的 Visible 设置为 false,但是如果又调用 CloseUI 方法,会将刚才 Visible 设置为 false 的窗口重新设置为 true。 2024-12-22 13:13:59 +08:00
ALEX
37d88c2d94 Merge pull request #103 from 6ag/main
更新文档
2024-12-17 10:07:14 +08:00
feng
f3aa8824d8 更新文档 2024-12-17 10:03:53 +08:00
ALEX
99c5afcbc5 Merge pull request #102 from 6ag/main
UIWindow新增Hide方法,将UIWindow中的UserData和UserDatas属性移动到UIBase
2024-12-16 23:46:33 +08:00
feng
4075588c34 UIWindow新增Hide方法,将UIWindow中的UserData和UserDatas属性移动到UIBase 2024-12-16 22:36:26 +08:00
Alex-Rachel
fdd9f34132 Merge branch 'main' of https://github.com/ALEXTANGXIAO/TEngine 2024-12-09 11:34:17 +08:00
Alex-Rachel
a2ab6efc71 #101 2024-12-09 11:34:05 +08:00
ALEX
67025c806e Update README.md 2024-12-09 11:12:02 +08:00
ALEXTANGXIAO
38afa45f9c #100 2024-12-04 10:45:19 +08:00
ALEXTANGXIAO
0dc572f43e #97 2024-12-02 23:51:53 +08:00
ALEXTANGXIAO
0679d924c1 Merge branch 'main' of https://github.com/ALEXTANGXIAO/TEngine 2024-12-02 23:48:12 +08:00
ALEXTANGXIAO
3de8cad99a #99 2024-12-02 23:46:08 +08:00
ALEX
065d5a7303 Merge pull request #98 from 6ag/main
适配 luban-next 最新版本的配表结构,新增 Mac 设备相关的 shell 脚本支持
2024-11-30 23:29:45 +08:00
feng
c089eb32ba 适配 luban-next 最新版本的配表结构,新增 Mac 设备相关的 shell 脚本支持 2024-11-30 23:09:45 +08:00
ALEXTANGXIAO
d571a937f8 UIWindow同一帧关闭导致GameObject无法销毁的极小概率bug修复 2024-11-22 23:09:44 +08:00
ALEXTANGXIAO
89210483a9 ScriptGenerator控制台日志 2024-10-16 22:56:39 +08:00
ALEXTANGXIAO
058ac2c9a5 RemoveAllListenerByOwner 倒序移除 2024-10-11 21:47:21 +08:00
ALEXTANGXIAO
990222c7c6 资源释放时序优化 2024-10-05 15:18:51 +08:00
ALEXTANGXIAO
d3914a96bb Merge branch 'main' of https://github.com/ALEXTANGXIAO/TEngine 2024-09-20 22:43:29 +08:00
ALEXTANGXIAO
4b178a9fa9 #80 2024-09-20 22:43:08 +08:00
ALEXTANG
79929c4ac3 Merge pull request #95 from landoU/main
修正:异步获取窗口方法GetUIAsync获取不到已加载的窗口
2024-09-20 22:29:28 +08:00
liufeiwei
38fa4d5cbc 修正:异步获取窗口方法GetUIAsync获取不到已显示的窗口 2024-09-18 09:42:12 +08:00
ALEXTANG
3ac6977f93 Rmv 2024-09-02 16:40:19 +08:00
ALEXTANGXIAO
3facec8f93 Update ProcedureInitPackage.cs 2024-08-25 19:09:07 +08:00
ALEXTANGXIAO
0570982b97 * support package mode tengine setting
* support package mode tengine setting
2024-08-25 19:07:11 +08:00
ALEXTANG
f785264873 #94 资源加载assetLoadingList处理
#94 资源加载assetLoadingList处理
2024-08-24 21:02:12 +08:00
ALEXTANGXIAO
4911ec074c 新增GetUIAsync,ShowUIAsyncAwait
新增GetUIAsync,ShowUIAsyncAwait
2024-08-11 10:24:27 +08:00
ALEXTANGXIAO
6ff9546152 Update RedNoteMgr.cs 2024-08-10 22:21:17 +08:00
ALEXTANG
5a8dc04b9c Merge pull request #92 from Kojima648/main
[opt] TEngine 设置界面逻辑优化
2024-08-10 17:24:37 +08:00
chengshengfei
d4482cf1c4 [opt]
中文:优化设置界面的tab切换,页面数据保存逻辑
English: Optimize tab switching and page data saving logic in the settings interface
2024-08-10 16:47:30 +08:00
ALEXTANG
c7fad139ba Merge pull request #91 from mi1890/main
* [fix] installed  as a  package ,class not found issue
2024-08-09 00:43:18 +08:00
mr.zz
650469a7db * support package mode tengine setting 2024-08-09 00:25:48 +08:00
mr.zz
c7c00eac9f * [fix] installed as a package ,class not found issue 2024-08-07 23:58:47 +08:00
ALEXTANG
5a883bc8ec Merge pull request #88 from kenkinky/main
[fixed]选中ResourceModule时进入Play模式抛出异常
2024-08-03 18:55:40 +08:00
BCC
79c1026c7c [fixed]选中ResourceModule时进入Play模式抛出异常 2024-08-02 12:54:25 +08:00
ALEXTANGXIAO
f2c69d58b2 DefaultLogger支持Unity6 2024-07-14 14:51:44 +08:00
ALEXTANGXIAO
c38d3b7cfa 支持Unity6 2024-07-14 14:37:43 +08:00
ALEXTANGXIAO
98cb74537a update hybridclr_version & UnityPackage Version 2024-07-14 14:32:00 +08:00
ALEXTANGXIAO
ed19a75be9 Update GameApp_RegisterSystem.cs 2024-07-14 14:30:43 +08:00
ALEXTANG
fd82ddf427 Merge pull request #85 from Vorik-S/main
加载热更新程序集的崩溃bug修正
2024-07-11 12:23:12 +08:00
沈挺
e53ceb0095 单例对象销毁时的检查,修正由此错误的销毁单例对象的bug 2024-07-09 18:49:55 +08:00
沈挺
9afda78735 修正GameApp_RegisterSystem文件漏写基类导致真机上无法正确执行GameApp.Instance.Active方法的bug 2024-07-09 17:23:24 +08:00
沈挺
5734d4f995 加载热更新程序集的崩溃bug修正 2024-07-09 16:11:41 +08:00
ALEXTANG
dc7ab7fd64 Merge branch 'main' of https://github.com/ALEXTANGXIAO/TEngine 2024-06-27 21:02:55 +08:00
ALEXTANG
fcb3416acd Update ResourceManager.cs 2024-06-27 21:02:47 +08:00
ALEXTANG
3df18c006d Merge pull request #82 from SaberArtoriaFan/Dev2
扩展绑定TE UI框架的便捷工具
2024-06-21 14:19:12 +08:00
EdwardLee
6cfae215dc 11 2024-06-21 00:59:26 +08:00
ALEXTANG
1aaa46c82c 资源模块增加设置:是否使用系统释放无用资源策略。
资源模块增加设置:是否使用系统释放无用资源策略。
2024-06-20 09:42:49 +08:00
ALEXTANG
ca79adce7c Merge pull request #79 from Severn17/main
新增WebGL一键打包功能 及 全平台运行增加WebGL示例图片
2024-06-17 15:22:15 +08:00
yangshiqi
b520eba187 新增WebGL一键打包功能 及 全平台运行增加WebGL示例图片 2024-06-14 15:09:01 +08:00
ALEXTANG
b5afaca217 Merge pull request #78 from Senfee-Cheng/main
[fix] 在注册事件之前调用初始化
2024-06-13 17:32:39 +08:00
chengshengfei
ea2efbf588 [fix] 在注册事件之前调用初始化 2024-06-13 16:21:40 +08:00
ALEXTANG
a4b1befc5a Merge pull request #77 from Senfee-Cheng/main
[opt] (编辑器下)如果有多个资源的Package,组件提供一个下拉,使用Yoo收集器的列表
2024-05-28 19:22:53 +08:00
ALEXTANG
8dcddfa328 Update EventInterfaceGenerate.cs 2024-05-28 19:19:01 +08:00
chengshengfei
dd37d130da [opt] (编辑器下)如果有多个资源的Package,组件提供一个下拉,使用Yoo收集器的列表 2024-05-28 19:16:45 +08:00
ALEXTANG
24d7dbc677 EventInterfaceGenerate支持List与Dictionary(但不推荐用)
EventInterfaceGenerate支持List与Dictionary(但不推荐用)
2024-05-28 18:09:13 +08:00
ALEXTANG
491100b932 Merge pull request #76 from Senfee-Cheng/main
[opt] 优化下载更新界面的显示
2024-05-28 16:55:42 +08:00
chengshengfei
c84c21574d [opt] 优化下载更新界面的显示 2024-05-28 15:56:05 +08:00
ALEXTANG
7914660f8c Update SingletonSystem.cs 2024-05-24 14:00:51 +08:00
ALEXTANG
b00679a276 Merge pull request #75 from SunXuebing/main
调整编辑器模式下模块销毁顺序,解决编辑器退出运行后资源管理器销毁了还被调用问题
2024-05-20 14:17:40 +08:00
sxb
cd9a10ccac Update RootModule.cs
修复条件判断
2024-05-20 13:31:57 +08:00
sxb1067
f11098d32e 调整编辑器模式下模块销毁顺序,解决编辑器退出运行后资源管理器销毁了还被调用问题 2024-05-20 11:25:01 +08:00
ALEXTANGXIAO
db6e715fa6 Update ActorEventDispatcher.cs 2024-05-19 22:03:53 +08:00
ALEXTANG
c2edf71ee4 Update AssetItemObject.cs 2024-05-17 17:55:53 +08:00
ALEXTANG
75af7c22c7 Merge pull request #73 from Senfee-Cheng/main
[fix] 移除 `BuildDLLCommand` 构造函数以尝试解决hotfix dll数组被清除的问题
2024-05-17 15:48:27 +08:00
chengshengfei
2f9edf83bf Merge branch 'main' of github.com:Senfee-Cheng/TEngine 2024-05-17 15:45:26 +08:00
chengshengfei
815095efaf [fix] 移除 BuildDLLCommand 构造函数以尝试解决数组被清除的问题 2024-05-17 15:45:06 +08:00
ALEXTANG
3101a64a48 Merge pull request #72 from Severn17/main
yooasset 微信小游戏设置,详情看yooasset微信小游戏支持解决方案文档
2024-05-16 16:05:41 +08:00
yangshiqi
457e0f36a4 yooasset 微信小游戏设置,详情看yooasset微信小游戏支持解决方案文档 2024-05-16 15:19:32 +08:00
ALEXTANG
0bd30def23 移除示例package文件 2024-05-16 13:16:25 +08:00
ALEXTANG
d24db83c8b Update 99-各平台运行RunAble.md 2024-05-16 12:34:55 +08:00
ALEXTANG
18a2840777 Merge pull request #70 from Senfee-Cheng/main
[Platform] Supports console
2024-05-16 10:26:13 +08:00
chengshengfei
1d901514e1 新的平台支持[Sony Console] 2024-05-16 10:18:03 +08:00
chengshengfei
983279c56d 更新文档,添加新增的支持的平台。 2024-05-16 10:14:22 +08:00
ALEXTANG
e9540c620a Merge pull request #69 from Severn17/main
修改编辑器下webgl  平台名字 宏问题
2024-05-14 17:57:38 +08:00
yangshiqi
39be280d88 修改编辑器下webgl 平台名字 宏问题 2024-05-14 17:45:40 +08:00
ALEXTANG
f9f9122027 单例系统完善生命周期、支持Dispose 2024-05-13 14:09:32 +08:00
ALEXTANG
682a0bd786 Update UnityExtension.cs 2024-05-08 17:11:39 +08:00
ALEXTANG
34c514cae8 Update README.md 2024-05-08 10:31:41 +08:00
ALEXTANG
c707cc1a38 GameApp Shutdown 2024-05-08 10:06:33 +08:00
ALEXTANG
f016fdd0a6 Update ReleaseTools.cs 2024-05-07 20:09:15 +08:00
ALEXTANG
4c0f5a77f9 支持编辑器下EnterPlayMode Options 2024-05-07 18:05:41 +08:00
ALEXTANG
ae0d00424f Update ProfilerDefineSymbols.cs 2024-04-30 17:42:36 +08:00
ALEXTANG
c8ecac5815 Update README.md 2024-04-29 12:27:40 +08:00
ALEXTANG
4f8c1cdfdd 修正SpritePostprocessor处理Atlas的override 2024-04-25 15:43:44 +08:00
ALEXTANG
dff043e075 Update SahderVariantCollect
Update SahderVariantCollect
2024-04-24 11:17:38 +08:00
ALEXTANG
e69dc47b8f 修正编辑器调用转表bat 当前路径的问题
修正编辑器调用转表bat 当前路径的问题
2024-04-17 14:27:28 +08:00
ALEXTANG
fc2ef0714c 设置DefaultYooFolderName为package。原本设置默认为yoo。
设置DefaultYooFolderName为package。原本设置默认为yoo。
2024-04-15 19:58:57 +08:00
ALEXTANG
d75c1c8c93 升级YooAsset->2.1.1、UniTask->2.5.4
升级YooAsset->2.1.1、UniTask->2.5.4
2024-04-15 19:37:42 +08:00
ALEXTANG
83bea559e4 Merge pull request #65 from Senfee-Cheng/main 2024-04-12 18:19:10 +08:00
ALEXTANG
26689639ed Merge pull request #64 from ZemelLing/dev-launcher 2024-04-12 18:17:06 +08:00
chengshengfei
bd6ac5f4da 优化代码。 2024-04-12 10:58:06 +08:00
ZemelLing
70dcb03a3f 确保Launcher打开的main场景,而不是其他名称里包含main的场景。 2024-04-11 13:09:16 +08:00
ALEXTANG
59b3649155 优化框架轮询逻辑 ,用脏数据构建Execute数组。
优化框架轮询逻辑 ,用脏数据构建Execute数组。
2024-04-08 15:37:06 +08:00
ALEXTANG
2c025efe3b 修正预加载流程 2024-04-08 14:41:16 +08:00
ALEXTANG
7ae6ef94ba 修正同时对一个图片进行异步SetSprite的处理
修正同时对一个图片进行异步SetSprite的处理
2024-04-07 15:45:32 +08:00
ALEXTANG
d5bb64b314 资源异步加载从缓存中延迟分帧处理。 2024-04-07 15:33:45 +08:00
ALEXTANG
4c34858ce0 Update SettingsUtils.cs 2024-03-29 15:24:02 +08:00
ALEXTANG
5adb2f83e5 Update AssetBundleCollectorSetting.asset 2024-03-29 14:38:44 +08:00
ALEXTANG
f10a89180e 支持边玩边下载,合理化webgl下的流程
支持边玩边下载,合理化webgl下的流程
2024-03-28 15:55:27 +08:00
ALEXTANG
3e3314858e 优化加载游戏物体接口,常用Parent参数前置,编辑器模式下增加超时保护提示
优化加载游戏物体接口,常用Parent参数前置,编辑器模式下增加超时保护提示
2024-03-25 14:27:42 +08:00
ALEXTANGXIAO
da57ed845f 修正同时对一个资源进行异步加载的处理
修正同时对一个资源进行异步加载的处理
2024-03-24 15:58:57 +08:00
ALEXTANGXIAO
df570f453a Create UnityEditor.iOS_I2Loc.Xcode.dll 2024-03-24 15:50:44 +08:00
ALEXTANG
a500a08a30 更新Luban配置表使用文档 2024-03-19 14:25:48 +08:00
ALEXTANG
2daac0e065 默认一键打包使用ClearAndCopyAll 2024-03-19 14:09:27 +08:00
ALEXTANG
514da6e99e Update README.md 2024-03-18 15:44:29 +08:00
ALEXTANG
7f91241df7 Update Version.cs 2024-03-18 15:06:48 +08:00
ALEXTANG
071974ab4f Update GameLogic.asmdef 2024-03-18 15:05:40 +08:00
ALEXTANG
c01e03ff70 Update AssetBundleCollectorSetting.asset 2024-03-18 15:02:23 +08:00
ALEXTANG
6fec792e05 TEngine全面更新,升级YooAsset2.1.1、UniTask、UIWindow、I2Localization
TEngine全面更新,升级YooAsset2.1.1、UniTask、UIWindow、I2Localization
2024-03-18 14:53:26 +08:00
ALEXTANG
04ecf71eab Update ProcedureLoadAssembly.cs 2024-02-27 12:05:26 +08:00
ALEXTANG
693ca5bb3d 编辑器模式重定向所有热更dll,以防编辑器运行AB时出现两份元数据。
编辑器模式重定向所有热更dll,以防编辑器运行AB时出现两份元数据。
2024-01-25 15:10:30 +08:00
ALEXTANG
90f84a2764 更新README
更新README
2023-12-20 12:43:39 +08:00
ALEXTANG
6107b41770 修正动态添加/异步添加ui组件的脏数据问题
修正动态添加/异步添加ui组件的脏数据问题
2023-12-19 18:24:33 +08:00
ALEXTANG
1423a3716a 编辑器模式重定向所有热更dll,以防编辑器运行AB时出现两份元数据。
编辑器模式重定向所有热更dll,以防编辑器运行AB时出现两份元数据。
2023-12-18 19:49:46 +08:00
ALEXTANG
6a87db76ee 优化局部单位事件分发器ActorEventDispatcher,EventRegInfo池化
优化局部单位事件分发器ActorEventDispatcher,EventRegInfo池化
2023-12-15 15:11:12 +08:00
ALEXTANG
3a6170dca6 Update UIWidget.cs 2023-12-15 14:25:41 +08:00
ALEXTANG
9d137d613a 修正Utility.Unity注入非Mono的LateUpdate时序问题
修正Utility.Unity注入非Mono的LateUpdate时序问题
2023-12-15 14:15:08 +08:00
ALEXTANG
ba77ec6b45 Update EventInterfaceGenerate.cs 2023-12-14 15:07:04 +08:00
ALEXTANG
b661da68f2 Update EventInterfaceGenerate.cs 2023-12-14 10:12:56 +08:00
ALEXTANGXIAO
e1040110bb 升级拓展GameEvent,支持基于Interface的方法调用抛出事件,以及自动化根据声明的Interface来生成实现代码。
升级拓展GameEvent,支持基于Interface的方法调用抛出事件,以及自动化根据声明的Interface来生成实现代码。
2023-12-13 23:27:54 +08:00
ALEXTANGXIAO
2d53fa1687 升级HybridCLR 4.0.13=>4.0.14
升级HybridCLR 4.0.13=>4.0.14
2023-12-13 19:27:05 +08:00
ALEXTANG
c4ef07f13e Update UnityExtension.cs 2023-12-12 13:00:53 +08:00
ALEXTANG
1f2d99ddc9 修正UIWindow资源句柄时序导致UI同步显示失效的问题。 2023-12-08 10:38:19 +08:00
ALEXTANG
edf4925a7a UIWidget增加Visible设置
UIWidget增加Visible设置
2023-12-07 16:32:54 +08:00
ALEXTANG
5d67238c8f 统一封装对shader的管理和示例。
统一封装对shader的管理和示例。
2023-12-07 10:55:50 +08:00
ALEXTANG
6cfd352482 关闭ResourceCacheMgr测试日志
关闭ResourceCacheMgr测试日志
2023-12-07 10:30:50 +08:00
ALEXTANG
40373c473d 修改通过Tag加载资源对象集合接口。(Operation需要自行管理生命周期释放)
修改通过Tag加载资源对象集合接口。(Operation需要自行管理生命周期释放)
2023-12-07 10:27:17 +08:00
ALEXTANG
d799f9fdf0 优化资源引用类与资源分组类。 2023-12-06 17:57:54 +08:00
ALEXTANG
15735c3d2d 修正循环列表GetItem,增加普通列表组件。 2023-12-06 14:41:31 +08:00
ALEXTANG
818a74f437 释放资源前判断资源合法性 2023-12-06 11:35:33 +08:00
ALEXTANG
f248757401 消除Editor引用隐患
消除Editor引用隐患
2023-12-01 17:41:43 +08:00
ALEXTANG
6ada0e7de7 移除测试日志 2023-12-01 17:18:13 +08:00
ALEXTANG
7ea472f97e 修正日志重定向下层日志跳转功能
修正日志重定向下层日志跳转功能
2023-12-01 10:45:57 +08:00
ALEXTANG
fb8528ff52 音频代理类增加暂停和取消暂停接口。
音频代理类增加暂停和取消暂停接口。
2023-11-30 16:17:35 +08:00
ALEXTANG
e3ac92ef46 修正音频模块回收池
修正音频模块回收池
2023-11-30 15:30:01 +08:00
ALEXTANG
be6a19c26a 修正Sound轨道不受SoundVolume的影响,调整AudioMixer音频Group命名
修正Sound轨道不受SoundVolume的影响,调整AudioMixer音频Group命名
2023-11-30 13:18:20 +08:00
ALEXTANG
e7f0636f30 拓展细分内存对象生命周期。
拓展细分内存对象生命周期。
2023-11-30 00:13:23 +08:00
ALEXTANG
fb38e96e9e 修正循环列表根据下标获取索引Item
修正循环列表根据下标获取索引Item
2023-11-29 19:48:18 +08:00
ALEXTANG
dd658c7e1d 对象池支持ShutDown
对象池支持ShutDown
2023-11-29 15:39:44 +08:00
ALEXTANG
4d7cb7641d 修正LoadGameObjectAsync接口传参
修正LoadGameObjectAsync接口传参
2023-11-29 15:24:02 +08:00
ALEXTANG
ae075b1fad 修正ProcedureDownloadFile更新时网速计算
修正ProcedureDownloadFile更新时网速计算
2023-11-29 12:55:36 +08:00
ALEXTANG
02827ce3b8 优化/新增超牛逼且很方便使用的对象池。
优化/新增超牛逼且很方便使用的对象池。
2023-11-28 19:36:26 +08:00
ALEXTANG
1a0e3f91e0 优化/新增超牛逼且很方便使用的对象池。
优化/新增超牛逼且很方便使用的对象池。
2023-11-28 15:27:34 +08:00
ALEXTANG
6d376b0e07 增加安全定时器GameTimerTick
增加安全定时器GameTimerTick
2023-11-28 14:25:25 +08:00
ALEXTANGXIAO
cb73c9a9eb 升级HybridCLR 4.0.12=>4.0.13 强烈建议升级,修复了若干bug
升级HybridCLR 4.0.12=>4.0.13 强烈建议升级,修复了若干bug
2023-11-27 22:47:30 +08:00
ALEXTANG
7dda73a7ac 增加泛用加载资源并绑定资源引用到GameObject上。
增加泛用加载资源并绑定资源引用到GameObject上。
2023-11-23 13:34:33 +08:00
ALEXTANG
9bcb636ed7 修正SetSprite接口绑定资源引用关系,避免0引用导致AssetBundle被释放使图片丢失。
修正SetSprite接口绑定资源引用关系,避免0引用导致AssetBundle被释放使图片丢失。
2023-11-23 11:44:43 +08:00
ALEXTANG
bd0cfc5577 增加计时器TimerModule。
增加计时器TimerModule。
2023-11-22 12:20:08 +08:00
ALEXTANG
ff613e4130 更新修复导入图集初始化信息不全的bug
更新修复导入图集初始化信息不全的bug
2023-11-20 17:49:08 +08:00
ALEXTANG
fea1ae2278 Merge pull request #59 from AlanWeekend/main
优化分包资源下载逻辑,统一WebGL平台与其他平台的远程热更资源引用方式
2023-11-20 11:56:04 +08:00
Weekend
866c440479 add:初始化Package流程中增加webgl平台更新update配置 2023-11-19 02:01:15 +08:00
Weekend
48ff839d64 Merge branch 'main' of https://github.com/AlanWeekend/TEngine 2023-11-19 01:43:59 +08:00
Weekend
69be3cfa23 update:统一WebGL平台与其他平台的远程热更资源引用方式 2023-11-19 01:41:47 +08:00
Weekend
5f2c27ecf0 Merge branch 'ALEXTANGXIAO:main' into main 2023-11-18 21:46:00 +08:00
Weekend
ef17cd851b add:优化分包下载 2023-11-18 21:44:24 +08:00
ALEXTANG
f186d6b058 Merge pull request #58 from AlanWeekend/main
增加初始化指定资源包操作,单独下载指定地址的资源文件
2023-11-16 10:52:14 +08:00
Weekend
4385123976 add:设置图片资源支持从指定资源包中加载 2023-11-15 15:39:04 +08:00
Weekend
1334dc30f9 Merge branch 'main' of https://github.com/AlanWeekend/TEngine 2023-11-15 15:15:11 +08:00
Weekend
af822add2c add:下载资源包中指定地址的资源文件 2023-11-15 15:14:47 +08:00
Weekend
ffb1f214ad Merge branch 'ALEXTANGXIAO:main' into main 2023-11-15 14:41:45 +08:00
Weekend
213aaed426 add:初始化指定资源包 2023-11-15 14:40:35 +08:00
ALEXTANG
623d301e41 修正异步创建子Widget时SetParent的问题
修正异步创建子Widget时SetParent的问题
2023-11-15 14:06:49 +08:00
ALEXTANG
2870383afe Resource模块支持操作指定资源包的资源
Resource模块支持操作指定资源包的资源
2023-11-15 10:48:28 +08:00
ALEXTANG
1ad435958a Merge pull request #57 from AlanWeekend/main
add:Resource模块支持操作指定资源包的资源
2023-11-15 10:08:53 +08:00
Weekend
386787c6ec add:Resource模块支持操作指定资源包的资源 2023-11-15 00:14:07 +08:00
ALEXTANG
cd65dde4c3 ReleasePreLoadAssets修正在webgl模式下Shutdown的问题
ReleasePreLoadAssets修正在webgl模式下Shutdown的问题
2023-11-14 16:00:09 +08:00
ALEXTANG
8321e77421 Merge pull request #56 from AlanWeekend/main
fixed:looplistitem重复赋值问题
2023-11-13 13:09:25 +08:00
Weekend
1b6f80952e fixed:looplistitem重复赋值问题
fixed:looplistitem重复赋值问题
2023-11-12 19:49:02 +08:00
ALEXTANG
b52e655c30 更正错误注释
更正错误注释
2023-11-07 11:04:59 +08:00
ALEXTANG
8c0df95626 修正CancellationTokenSource重复Dispose问题
修正CancellationTokenSource重复Dispose问题
2023-11-03 16:58:42 +08:00
ALEXTANG
0d1e308f1c Update ResourceModule.cs 2023-11-03 10:07:25 +08:00
ALEXTANG
f8797538fd Update UIBase.cs 2023-11-03 09:55:36 +08:00
ALEXTANG
fe4e168041 Update ProcedurePreload.cs 2023-11-02 15:35:01 +08:00
ALEXTANG
8e9047d3a3 基于资源框架实现对标签WEBGL_PRELOAD、PRELOAD的预加载。 接口GameModule.Resource.GetPreLoadAsset<T>(location)
基于资源框架实现对标签WEBGL_PRELOAD、PRELOAD的预加载。 接口GameModule.Resource.GetPreLoadAsset<T>(location)
2023-11-02 13:16:05 +08:00
ALEXTANG
04bfaeccc8 示例CLI工作流
示例CLI工作流
2023-11-02 12:55:27 +08:00
ALEXTANG
d66c823c15 更新优化启用UpdateData时UILoadUpdate时序的问题
更新优化启用UpdateData时UILoadUpdate时序的问题
2023-11-02 11:48:47 +08:00
ALEXTANG
0ec1424f0a 升级HybridCLR 4.0.11=>4.0.12
升级HybridCLR 4.0.11=>4.0.12
2023-11-02 11:12:56 +08:00
ALEXTANG
01f8eb9d57 升级HybridCLR 4.0.10=>4.0.11 强烈建议升级,修复了若干bug
升级HybridCLR 4.0.10=>4.0.11 强烈建议升级,修复了若干bug
2023-11-02 10:01:30 +08:00
ALEXTANG
f5021a9688 修正Utility生命周期注入OnDestroy和OnDrawGizmos无效的问题
修正Utility生命周期注入OnDestroy和OnDrawGizmos无效的问题
2023-10-31 12:45:40 +08:00
ALEXTANG
a632f7a5ad Merge pull request #55 from AlanWeekend/main
修复demo流程的下载网速显示错误问题
2023-10-30 23:48:17 +08:00
Weekend
5f968f4154 优化网速计算
优化网速计算
2023-10-30 23:47:07 +08:00
Weekend
c9fe83c2bd Merge branch 'main' of https://github.com/AlanWeekend/TEngine 2023-10-30 23:04:05 +08:00
Weekend
2c00d103cb Update ProcedureDownloadFile.cs
fixed:demo流程的下载网速错误显示问题
2023-10-30 23:04:01 +08:00
ALEXTANG
1d56437d9f Update Utility.Http.cs 2023-10-30 11:15:52 +08:00
ALEXTANG
69db1ff977 修正音频模块音频代理类赋值问题
#54 修正音频模块音频代理类赋值问题
2023-10-30 10:40:22 +08:00
ALEXTANG
48887b1aee 框架支持Shudown不关闭游戏重启
框架支持Shudown不关闭游戏重启
2023-10-27 13:18:12 +08:00
ALEXTANG
381ea8bb8d 增加支持ComponentAutoBindTool自动绑定UI元素组件。
增加支持ComponentAutoBindTool自动绑定UI元素组件。
2023-10-27 10:48:21 +08:00
ALEXTANG
7401edac15 移除UIElement代码绑定工具,为后续AutoBind代码绑定工具做准备
移除UIElement代码绑定工具,为后续AutoBind代码绑定工具做准备
2023-10-27 00:13:04 +08:00
ALEXTANG
b1c7f30be9 ErrorLogger屏幕显示开启与DebugModule关联。
ErrorLogger屏幕显示开启与DebugModule关联。
2023-10-26 23:45:26 +08:00
ALEXTANG
cfaf82a623 释放资源判断资源是否有效
释放资源判断资源是否有效
2023-10-26 14:07:38 +08:00
ALEXTANG
6992d12c6c 修复循环列表主动GetItemByIndex和GetItemList的问题
修复循环列表主动GetItemByIndex和GetItemList的问题
2023-10-26 13:12:35 +08:00
ALEXTANG
119d9683ad Merge pull request #53 from AlanWeekend/main
修复UIListBase和UILoopListWidget赋值问题
2023-10-26 12:49:00 +08:00
ALEXTANG
9478868513 修正HttpDispose
修正HttpDispose
2023-10-26 12:28:06 +08:00
ALEXTANG
6ed32082e1 修正HttpDispose
修正HttpDispose
2023-10-26 11:43:32 +08:00
ALEXTANG
6ee515e8c5 增加局部单位事件分发器的封装。
增加局部单位事件分发器的封装。
2023-10-26 10:28:05 +08:00
ALEXTANG
b839afa76a 释放资源判断资源是否有效、支持YooAssets日志重定向
释放资源判断资源是否有效、支持YooAssets日志重定向
2023-10-26 00:22:02 +08:00
Weekend
d9605b348a 修复UILoopListWidget赋值问题 2023-10-25 22:34:02 +08:00
Weekend
dfef83919c 修复UIListBase和UIUILoopListWidget赋值问题 2023-10-25 22:18:57 +08:00
ALEXTANG
f5f983f220 移除资源模块加载场景,加载场景统一走场景管理模块。增加场景加载进度回调。
移除资源模块加载场景,加载场景统一走场景管理模块。增加场景加载进度回调。
2023-10-23 17:01:06 +08:00
ALEXTANG
d61b1206ee 通过CommandLineReader可以不前台开启Unity实现静默打包,详见CommandLineReader.cs example1
通过CommandLineReader可以不前台开启Unity实现静默打包,详见CommandLineReader.cs example1
2023-10-23 15:22:34 +08:00
ALEXTANG
3650ba1a8b 更新转表bat自动拷贝ConfigSystem
更新转表bat自动拷贝ConfigSystem
2023-10-23 13:00:40 +08:00
ALEXTANG
8f14a4d2cb 日志重定向相关的实用函数。
日志重定向相关的实用函数。
2023-10-23 11:41:44 +08:00
ALEXTANG
dc22e595c9 拓展支持AssetInspector,支持更多文件类型在Inspector显示
拓展支持AssetInspector,支持更多文件类型在Inspector显示
2023-10-23 11:41:33 +08:00
ALEXTANG
0e70f7d446 日志重定向相关的实用函数。
日志重定向相关的实用函数。
2023-10-23 11:27:06 +08:00
ALEXTANG
039569b2d4 提交配置表加载模板
提交配置表加载模板
2023-10-23 10:15:11 +08:00
ALEXTANG
ea38004ba2 luban-next支持懒加载 感谢半仙儿提供支持
luban-next支持懒加载 感谢半仙儿提供支持
2023-10-20 16:24:00 +08:00
ALEXTANG
cc97c0583a 升级luban-next
升级luban-next
2023-10-20 11:53:29 +08:00
ALEXTANG
887094a4b1 升级luban-next
升级luban-next
2023-10-20 11:38:51 +08:00
ALEXTANG
0d09a7e73b 增加场景管理模块。
增加场景管理模块。
2023-10-18 16:42:44 +08:00
ALEXTANG
d8f8514f9d WebGL下不对YooAssets.Destroy();
WebGL下不对YooAssets.Destroy();
2023-10-18 11:23:20 +08:00
ALEXTANG
f2f6b2422f 资源模块优化、UI模块优化,增加接口参数是否使用缓存资源操作句柄。
资源模块优化、UI模块优化,增加接口参数是否使用缓存资源操作句柄、如果需要则不会淘汰缓存队列中的资源清单。
2023-10-18 10:30:12 +08:00
ALEXTANG
3a9cad9397 Update ResourceManager.cs 2023-10-16 16:38:13 +08:00
ALEXTANG
5e70e7972e 更新资源模块接口
更新资源模块接口
2023-10-16 13:03:41 +08:00
ALEXTANG
8d2b4200d6 升级HybridCLR 4.0.8=>4.0.10
升级HybridCLR 4.0.8=>4.0.10
2023-10-13 16:09:34 +08:00
ALEXTANG
b983e85416 资源模块优化-使用资源缓存表以及资源淘汰算法,缓存常用资源,利于获取、淘汰不常用资源。
资源模块优化-使用资源缓存表以及资源淘汰算法,缓存常用资源,利于获取、淘汰不常用资源。
2023-10-13 15:53:16 +08:00
ALEXTANG
99d2afdbd7 事件模块通用命名。
事件模块通用命名。
2023-10-10 21:00:21 +08:00
ALEXTANG
57ce836b3c 升级HybridCLR 4.0.7=>4.0.8
升级HybridCLR 4.0.7=>4.0.8
2023-10-10 20:21:33 +08:00
ALEXTANG
8dce78d6fb 事件模块拓展参数支持。
事件模块拓展参数支持。
2023-10-10 18:13:51 +08:00
ALEXTANG
6d41adffd9 音频模块初始化可自定义音频混响器.
音频模块初始化可自定义音频混响器.
2023-10-10 18:09:35 +08:00
ALEXTANG
cb9129261b 增加通过Tag加载资源对象集合的接口。
增加通过Tag加载资源对象集合的接口。
2023-10-09 19:37:00 +08:00
ALEXTANG
89dd6214d4 修复首次图集导入bug
修复首次图集导入bug
2023-10-09 19:37:00 +08:00
ALEXTANG
1aec76d64c 更新packages
1.升级HybridCLR 4.0.6=>4.0.7
2.使用Unity新版MemoryProfiler
2023-10-09 19:37:00 +08:00
ALEXTANG
859f654f6d 关闭垂直同步,避免设置帧率失效
关闭垂直同步,避免设置帧率失效
2023-10-09 19:37:00 +08:00
2889 changed files with 142650 additions and 112453 deletions

View File

@@ -13,11 +13,12 @@
![image](src/1-2.png)
### 4.打包运行
* 1.运行菜单 HybridCLR/Define Symbols/Enable HybridCLR 运行开启HybridCLR热更新
* 2.运行菜单 HybridCLR/Generate/All 进行必要的生成操作。这一步不可遗漏!!!
* 3.运行菜单 HybridCLR/Build/BuildAssets And CopyTo AssemblyPath生成热更新dll并copy到热更程序集中。
* 4.运行菜单 YooAsset/AssetBundle Builder 构建AB
* 5.打开Build Settings对话框点击Build And Run打包并且运行热更新示例工程
* 1.运行菜单 HybridCLR/Install... 安装HybridCLR,每次更新HybridCLR版本需要重新执行一次安装。
* 2.运行菜单 HybridCLR/Define Symbols/Enable HybridCLR 运行开启HybridCLR热更新。
* 3.运行菜单 HybridCLR/Generate/All 进行必要的生成操作。这一步不可遗漏!!!
* 4.运行菜单 HybridCLR/Build/BuildAssets And CopyTo AssemblyPath生成热更新dll并copy到热更程序集中。
* 5.运行菜单 YooAsset/AssetBundle Builder 构建AB
* 6.打开Build Settings对话框点击Build And Run打包并且运行热更新示例工程。
### 遇到问题请查看HybridlCLR的<a href="https://hybridclr.doc.code-philosophy.com/docs/help/commonerrors"><strong>常见错误(commonerrors)</strong></a>
@@ -33,26 +34,30 @@
### 目录结构
```
Assets
├── AssetRaw 资源目录
── Atlas 图集目录
├── GameScripts 热更程序集目录
├── Scenes 主场景目录
└── TEngine
── AssetSetting YooAsset资源设置
├── Editor TEngine-Editor程序集
└── Runtime TEngine-Runtime程序集
├── AssetArt // 美术资源目录
│ └── Atlas // 自动生成图集目录
├── AssetRaw // 热更资源目录
│ ├── UIRaw // UI图片目录
├── Atlas // 需要自动生成图集的UI素材目录
│ │ ── Raw // 不需要自动生成图集的UI素材目录
├── Editor // 编辑器脚本目录
├── HybridCLRData // hybridclr相关目录
├── Scenes // 主场景目录
├── GameScripts // 程序集目录
└── TEngine // 框架核心目录
├── AssetSetting // YooAsset资源设置
├── Editor // TEngine-Editor程序集
└── Runtime // TEngine-Runtime程序集
```
### 热更新程序集划分
```
Assets/GameScripts
├── Editor 编辑器程序集
── HotFix 游戏热更程序集目录 [Folder]
| ├── GameBase 游戏基础框架程序集 [Dll]
| ├── GameProto 游戏配置协议程序集 [Dll]
| ── BattleCore 游戏核心战斗程序集 [Dll]
| └── GameLogic 游戏业务逻辑程序集 [Dll]
| ── GameApp.cs 热更主入口
| └── GameApp_RegisterSystem.cs 热更主入口注册系统
└── Runtime Runtime程序集
├── Main // 主程序程序集(启动器与流程)
── HotFix // 游戏热更程序集目录 [Folder]
├── GameBase // 游戏基础框架程序集 [Dll]
├── GameProto // 游戏配置协议程序集 [Dll]
── GameLogic // 游戏业务逻辑程序集 [Dll]
├── GameApp.cs // 热更主入口
── GameApp_RegisterSystem.cs // 热更主入口注册系统
```

View File

@@ -1,16 +1,16 @@
# TEngine
## TEngine-Runtime
### AOT内核基于Gameframework,最简化以及商业化适配。
### AOT内核基于Gameframework,优化、最简化以及商业化适配。
![image](src/2-1.png)
## AOT游戏框架模块基类。
#### 框架思路为面向接口编程如Resource资源模块开发白皮书为先定义IResourceManager的接口规范然后编写ResourceManager继承框架具体实现(GameFrameworkModule)以及实现接口。最后实现调用层GameFrameworkModuleBase,调用层可以拓展编辑器供开发者自定义模块参数。
#### 框架思路为面向接口编程如Resource资源模块开发白皮书为先定义IResourceManager的接口规范然后编写ResourceManager继承框架具体实现(ModuleImp)以及实现接口。最后实现调用层Module调用层可以拓展编辑器供开发者自定义模块参数。
``` csharp
/// <summary>
/// 游戏框架模块抽象类。GameFrameworkModule为具体框架模块实现。
/// 游戏框架模块抽象类。ModuleImp为具体框架模块实现。
/// </summary>
internal abstract class GameFrameworkModule
internal abstract class ModuleImp
{
/// <summary>
/// 获取游戏框架模块优先级。
@@ -34,16 +34,16 @@ internal abstract class GameFrameworkModule
//=====================================================================//
/// <summary>
/// 游戏框架模块抽象类。GameFrameworkModuleBase 为Mono调用层。
/// 游戏框架模块抽象类。Module 为Mono调用层。
/// </summary>
public abstract class GameFrameworkModuleBase : MonoBehaviour
public abstract class Module : MonoBehaviour
{
/// <summary>
/// 游戏框架模块初始化。
/// </summary>
protected virtual void Awake()
{
GameEntry.RegisterModule(this);
ModuleSystem.RegisterModule(this);
}
}
```
@@ -51,17 +51,15 @@ public abstract class GameFrameworkModuleBase : MonoBehaviour
## 热更域程序集设计与说明
```
Assets/GameScripts
├── Editor 编辑器程序集
── HotFix 游戏热更程序集目录 [Folder]
| ├── GameBase 游戏基础框架程序集 [Dll]
| ├── GameProto 游戏配置协议程序集 [Dll]
| ── BattleCore 游戏核心战斗程序集 [Dll]
| ── GameLogic 游戏业务逻辑程序集 [Dll]
| ── GameApp.cs 热更主入口
| └── GameApp_RegisterSystem.cs 热更主入口注册系统
└── Runtime Runtime程序集
├── Main // 主程序程序集(启动器与流程)
── HotFix // 游戏热更程序集目录 [Folder]
├── GameBase // 游戏基础框架程序集 [Dll]
├── GameProto // 游戏配置协议程序集 [Dll]
── GameLogic // 游戏业务逻辑程序集 [Dll]
── GameApp.cs 热更主入口
── GameApp_RegisterSystem.cs 热更主入口注册系统
```
游戏内主要玩法逻辑包括UI会在GameLogic中编写GameBase则存放一些通用性的逻辑GameProto存放与服务区交互的协议以及配置表逻辑BattleCore为帧同步分离的逻辑层做预留。若有项目需求完全可以进行自定义增删HotFix程序集。
游戏内主要玩法逻辑包括UI会在GameLogic中编写GameBase则存放一些通用性的逻辑GameProto存放与服务区交互的协议以及配置表逻辑。若有项目需求完全可以进行自定义增删HotFix程序集。
PS注意增删程序集后需要同步到HybridClr的Setting面板以及TEngineSetting的面板。TEngineSettings面板有按钮可以从HybridClr中同步AOT与热更程序集。

View File

@@ -1,11 +1,19 @@
# 3-6.配置表模块 - ConfigLoader
# 3-6.配置表模块 - ConfigSystem
接入最佳游戏配置解决方案 - <a href="https://github.com/focus-creative-games/luban"><strong>Luban</strong></a>
<a href="https://luban.doc.code-philosophy.com/#/manual/traits"><strong>Luban文档 </strong></a>
### 在TEngine中Luban工具集位于以下目录
### 在TEngine中Luban配置表目录位于以下目录
![image](src/3-6-1.png)
### 安装luban配置表
1.在TEngine根目录同级克隆下最新的luban-next仓库。
![image](src/3-6-2.png)
2.Tools目录执行build-luban完成
![image](src/3-6-3.png)
3.转表则去luban配置目录执行对应bat
TEngine内置默认使用懒加载配置也支持基于UniTask的异步加载同步加载包括服务器的Task异步加载使用对应转表的bat即可。
### 介绍

View File

@@ -6,6 +6,8 @@
### ProcedureInitPackage - 流程初始化Package
### ProcedurePreload - 流程预加载
### ProcedureInitResources - 流程初始化Resources
### ProcedureUpdateVersion - 流程更新版本Version
@@ -20,5 +22,6 @@
### ProcedureClearCache - 流程清理缓存
### ProcedureLoadAssembly - 流程加载进入热更新程序集
### ProcedureLoadAssembly - 流程加载进入热更新程序集
### ProcedureStartGame - 流程开始游戏

View File

@@ -13,4 +13,14 @@
![image](src/Android-RunSuccessed.png)
### IOS真机运行
![image](src/Iphone-RunSuccessed.png)
![image](src/Iphone-RunSuccessed.png)
### WebGL真机运行
![image](src/WebGL-RunSuccessed.png)
### 索尼 PS5 真机运行
![image](src/Console%20Viewer.png)
![image](src/Console%20Output.png)

16
Books/Donate.md Normal file
View File

@@ -0,0 +1,16 @@
## <strong>Buy me a coffee.
您的赞助会让我们做得更快更好如果觉得TEngine对您有帮助不妨赞助我买杯咖啡吧~
<p align="center">
<img src="src/Donate-微信.jpg" alt="logo" width="384" height="562">
</p>
<p align="center">
<img src="src/Donate-支付宝.jpg" alt="logo" width="384" height="562">
</p>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 40 KiB

After

Width:  |  Height:  |  Size: 74 KiB

BIN
Books/src/3-6-2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

BIN
Books/src/3-6-3.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 40 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 124 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 477 KiB

BIN
Books/src/Donate-微信.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 113 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 214 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 101 KiB

View File

@@ -0,0 +1,9 @@
cd /d %~dp0
call path_define.bat
%UNITYEDITOR_PATH%/Unity.exe %WORKSPACE% -logFile %BUILD_LOGFILE% -executeMethod TEngine.ReleaseTools.AutomationBuildAndroid -quit -batchmode -CustomArgs:Language=en_US; %WORKSPACE%
@REM for /f "delims=[" %%i in (%BUILD_LOGFILE%) do echo %%i
pause

18
BuildCLI/build_android.sh Normal file
View File

@@ -0,0 +1,18 @@
#!/bin/bash
cd "$(dirname "$0")"
source ./path_define.sh
"${UNITYEDITOR_PATH}/Unity" "${WORKSPACE}" \
-logFile "${BUILD_LOGFILE}" \
-executeMethod TEngine.ReleaseTools.AutomationBuildAndroid \
-quit -batchmode \
-CustomArgs:Language=en_US "${WORKSPACE}"
while IFS= read -r line; do
echo "$line"
done < "${BUILD_LOGFILE}"
echo "按任意键继续..."
read -k1

6
BuildCLI/path_define.bat Normal file
View File

@@ -0,0 +1,6 @@
cd /d %~dp0
set WORKSPACE=G:/github/TEngine/UnityProject
set UNITYEDITOR_PATH=G:/UnityEditor/2021.3.20f1c1/Editor
set BUILD_DLL_LOGFILE=./build_dll.log
set BUILD_LOGFILE=./build.log

14
BuildCLI/path_define.sh Normal file
View File

@@ -0,0 +1,14 @@
#!/bin/bash
cd "$(dirname "$0")"
export WORKSPACE="/Users/your_user/github/TEngine/UnityProject" # 请替换为 macOS 上的实际路径
export UNITYEDITOR_PATH="/Applications/Unity/Hub/Editor/2021.3.20f1c1/Unity.app/Contents/MacOS" # 请替换为 macOS 上的 Unity 路径
export BUILD_DLL_LOGFILE="./build_dll.log"
export BUILD_LOGFILE="./build.log"
echo "环境变量已设置:"
echo "WORKSPACE=${WORKSPACE}"
echo "UNITYEDITOR_PATH=${UNITYEDITOR_PATH}"
echo "BUILD_DLL_LOGFILE=${BUILD_DLL_LOGFILE}"
echo "BUILD_LOGFILE=${BUILD_LOGFILE}"

View File

@@ -1,48 +0,0 @@
using Bright.Serialization;
using GameBase;
using GameConfig;
using TEngine;
using UnityEngine;
/// <summary>
/// 配置加载器。
/// </summary>
public class ConfigSystem : Singleton<ConfigSystem>
{
private bool _init = false;
private Tables _tables;
public Tables Tables
{
get
{
if (!_init)
{
Load();
}
return _tables;
}
}
/// <summary>
/// 加载配置。
/// </summary>
public void Load()
{
_tables = new Tables(LoadByteBuf);
_init = true;
}
/// <summary>
/// 加载二进制配置。
/// </summary>
/// <param name="file">FileName</param>
/// <returns>ByteBuf</returns>
private ByteBuf LoadByteBuf(string file)
{
var textAssets = GameModule.Resource.LoadAsset<TextAsset>(file);
byte[] ret = textAssets.bytes;
return new ByteBuf(ret);
}
}

View File

@@ -1,61 +0,0 @@
using Bright.Serialization;
using GameBase;
using GameConfig;
using TEngine;
using UnityEngine;
/// <summary>
/// 配置加载器。
/// </summary>
public class ConfigSystem : Singleton<ConfigSystem>
{
private bool _init = false;
private Tables _tables;
public Tables Tables
{
get
{
if (!_init)
{
Load();
}
return _tables;
}
}
/// <summary>
/// 加载配置。
/// </summary>
public void Load()
{
_tables = new Tables(LoadIdxByteBuf, LoadByteBuf);
_init = true;
}
/// <summary>
/// 加载二进制配置。
/// </summary>
/// <param name="file">FileName</param>
/// <returns>ByteBuf</returns>
private ByteBuf LoadByteBuf(string file)
{
var textAssets = GameModule.Resource.LoadAsset<TextAsset>(file);
byte[] ret = textAssets.bytes;
return new ByteBuf(ret);
}
/// <summary>
/// 加载懒加载Index。
/// </summary>
/// <param name="file"></param>
/// <returns></returns>
private ByteBuf LoadIdxByteBuf(string file)
{
var textAssets = GameModule.Resource.LoadAsset<TextAsset>($"Idx_{file}");
byte[] ret = textAssets.bytes;
return new ByteBuf(ret);
}
}

View File

@@ -1,87 +0,0 @@
using Bright.Serialization;
using System.Collections.Generic;
{{
name = x.name
parent_def_type = x.parent_def_type
export_fields = x.export_fields
hierarchy_export_fields = x.hierarchy_export_fields
}}
namespace {{x.namespace_with_top_module}}
{
{{~if x.comment != '' ~}}
/// <summary>
/// {{x.escape_comment}}
/// </summary>
{{~end~}}
public {{x.cs_class_modifier}} partial class {{name}} : {{if parent_def_type}} {{x.parent}} {{else}} Bright.Config.BeanBase {{end}}
{
public {{name}}(ByteBuf _buf) {{if parent_def_type}} : base(_buf) {{end}}
{
{{~ for field in export_fields ~}}
{{cs_deserialize '_buf' field.convention_name field.ctype}}
{{~if field.index_field~}}
foreach(var _v in {{field.convention_name}})
{
{{field.convention_name}}_Index.Add(_v.{{field.index_field.convention_name}}, _v);
}
{{~end~}}
{{~end~}}
PostInit();
}
public static {{name}} Deserialize{{name}}(ByteBuf _buf)
{
{{~if x.is_abstract_type~}}
switch (_buf.ReadInt())
{
{{~for child in x.hierarchy_not_abstract_children~}}
case {{child.full_name}}.__ID__: return new {{child.full_name}}(_buf);
{{~end~}}
default: throw new SerializationException();
}
{{~else~}}
return new {{x.full_name}}(_buf);
{{~end~}}
}
{{~ for field in export_fields ~}}
{{~if field.comment != '' ~}}
/// <summary>
/// {{field.escape_comment}}
/// </summary>
{{~end~}}
public {{cs_define_type field.ctype}} {{field.convention_name}} { get; private set; }
{{~if field.index_field~}}
public readonly Dictionary<{{cs_define_type field.index_field.ctype}}, {{cs_define_type field.ctype.element_type}}> {{field.convention_name}}_Index = new Dictionary<{{cs_define_type field.index_field.ctype}}, {{cs_define_type field.ctype.element_type}}>();
{{~end~}}
{{~if field.gen_ref~}}
public {{field.cs_ref_validator_define}}
{{~end~}}
{{~if (gen_datetime_mills field.ctype) ~}}
public long {{field.convention_name}}_Millis => {{field.convention_name}} * 1000L;
{{~end~}}
{{~if field.gen_text_key~}}
public {{cs_define_text_key_field field}} { get; }
{{~end~}}
{{~end~}}
{{~if !x.is_abstract_type~}}
public const int __ID__ = {{x.id}};
public override int GetTypeId() => __ID__;
{{~end~}}
public override string ToString()
{
return "{{full_name}}{ "
{{~for field in hierarchy_export_fields ~}}
+ "{{field.convention_name}}:" + {{cs_to_string field.convention_name field.ctype}} + ","
{{~end~}}
+ "}";
}
partial void PostInit();
}
}

View File

@@ -1,413 +0,0 @@
using Bright.Serialization;
using System.Collections.Generic;
using System.Linq;
namespace {{x.namespace_with_top_module}}
{
{{
name = x.name
key_type = x.key_ttype
key_type1 = x.key_ttype1
key_type2 = x.key_ttype2
value_type = x.value_ttype
}}
{{~if x.comment != '' ~}}
/// <summary>
/// {{x.escape_comment}}
/// </summary>
{{~end~}}
public partial class {{name}}
{
public static {{name}} Instance { get; private set; }
{{~if x.is_map_table ~}}
private bool _readAll = false;
private Dictionary<{{cs_define_type key_type}}, {{cs_define_type value_type}}> _dataMap;
private List<{{cs_define_type value_type}}> _dataList;
public Dictionary<{{cs_define_type key_type}}, {{cs_define_type value_type}}> DataMap
{
get
{
if(!_readAll)
{
ReadAll();
_readAll = true;
}
return _dataMap;
}
}
public List<{{cs_define_type value_type}}> DataList
{
get
{
if(!_readAll)
{
ReadAll();
_readAll = true;
}
return _dataList;
}
}
private Dictionary<{{cs_define_type key_type}},int> _indexMap;
public List<{{cs_define_type key_type}}> Indexes;
private System.Func<ByteBuf> _dataLoader;
private void ReadAll()
{
_dataList.Clear();
foreach(var index in Indexes)
{
var v = Get(index);
_dataMap[index] = v;
_dataList.Add(v);
}
}
public {{name}}(ByteBuf _buf, string _tbName, System.Func<string, ByteBuf> _loader)
{
Instance = this;
_dataMap = new Dictionary<{{cs_define_type key_type}}, {{cs_define_type value_type}}>();
_dataList = new List<{{cs_define_type value_type}}>();
_indexMap = new Dictionary<{{cs_define_type key_type}}, int>();
_dataLoader = new System.Func<ByteBuf>(() => _loader(_tbName));
for (int n = _buf.ReadSize(); n > 0; --n)
{
{{cs_define_type key_type}} key;
{{cs_deserialize '_buf' 'key' key_type}}
int index = _buf.ReadInt();
_indexMap[key] = index;
}
Indexes = _indexMap.Keys.ToList();
PostInit();
}
{{~if value_type.is_dynamic~}}
public T GetOrDefaultAs<T>({{cs_define_type key_type}} key) where T : {{cs_define_type value_type}}
{
if(_indexMap.TryGetValue(key,out var _))
{
return (T)Get(key);
}
return default(T);
}
public T GetAs<T>({{cs_define_type key_type}} key) where T : {{cs_define_type value_type}} => (T)Get(key);
{{~end~}}
public {{cs_define_type value_type}} this[{{cs_define_type key_type}} key] => Get(key);
public {{cs_define_type value_type}} Get({{cs_define_type key_type}} key)
{
{{cs_define_type value_type}} _v;
if(_dataMap.TryGetValue(key, out _v))
{
return _v;
}
ResetByteBuf(_indexMap[key]);
{{cs_deserialize '_buf' '_v' value_type}}
_dataMap[_v.{{x.index_field.convention_name}}] = _v;
_v.Resolve(tables);
if(_indexMap.Count == _dataMap.Count)
{
_buf = null;
}
return _v;
}
public {{cs_define_type value_type}} GetOrDefault({{cs_define_type key_type}} key)
{
if(_indexMap.TryGetValue(key,out var _))
{
return Get(key);
}
return null;
}
{{~else if x.is_list_table ~}}
private bool _readAllList = false;
private List<{{cs_define_type value_type}}> _dataList;
public List<{{cs_define_type value_type}}> DataList
{
get
{
if(!_readAllList)
{
ReadAllList();
_readAllList = true;
}
return _dataList;
}
}
private System.Func<ByteBuf> _dataLoader;
{{~if x.is_union_index~}}
private bool _readAll;
private {{cs_table_union_map_type_name x}} _dataMapUnion;
public {{cs_table_union_map_type_name x}} DataMapUnion
{
get
{
if(!_readAll)
{
ReadAll();
_readAll = true;
}
return _dataMapUnion;
}
}
private void ReadAll()
{
foreach(var index in Indexes)
{
var ({{cs_table_get_param_name_list x}}) = index;
var v = Get({{cs_table_get_param_name_list x}});
_dataMapUnion[({{cs_table_get_param_name_list x}})] = v;
}
}
private void ReadAllList()
{
_dataList.Clear();
foreach(var index in Indexes)
{
var ({{cs_table_get_param_name_list x}}) = index;
var v = Get({{cs_table_get_param_name_list x}});
_dataList.Add(v);
}
}
private Dictionary<({{cs_table_get_param_def_list x}}),int> _indexMap;
public List<({{cs_table_get_param_def_list x}})> Indexes;
{{~else if !x.index_list.empty?~}}
{{~for idx in x.index_list~}}
private bool _readAll{{idx.index_field.convention_name}} = false;
private Dictionary<{{cs_define_type idx.type}}, {{cs_define_type value_type}}> _dataMap_{{idx.index_field.name}};
public Dictionary<{{cs_define_type idx.type}}, {{cs_define_type value_type}}> DataMap_{{idx.index_field.name}}
{
get
{
if(!_readAll{{idx.index_field.convention_name}})
{
ReadAll{{idx.index_field.convention_name}}();
_readAll{{idx.index_field.convention_name}} = true;
}
return _dataMap_{{idx.index_field.name}};
}
}
{{~if for.first ~}}
private void ReadAllList()
{
_dataList.Clear();
foreach(var index in Indexes_{{idx.index_field.name}})
{
var v = GetBy{{idx.index_field.convention_name}}(index);
_dataList.Add(v);
}
}
{{~end~}}
private void ReadAll{{idx.index_field.convention_name}}()
{
foreach(var index in Indexes_{{idx.index_field.name}})
{
var v = GetBy{{idx.index_field.convention_name}}(index);
_dataMap_{{idx.index_field.name}}[index] = v;
}
}
private Dictionary<{{cs_define_type idx.type}},int> _indexMap_{{idx.index_field.name}};
public List<{{cs_define_type idx.type}}> Indexes_{{idx.index_field.name}};
{{~end~}}
{{~else~}}
private bool _readAll = false;
private Dictionary<int,int> _indexMap;
public List<int> Indexes;
private Dictionary<int, {{cs_define_type value_type}}> _dataMap;
private Dictionary<int, {{cs_define_type value_type}}> DataMap
{
get
{
if(!_readAll)
{
ReadAllList();
}
return _dataMap;
}
}
private void ReadAllList()
{
_dataList.Clear();
foreach(var index in Indexes)
{
var v = Get(index);
_dataList.Add(v);
}
}
{{~end~}}
public {{name}}(ByteBuf _buf, string _tbName, System.Func<string, ByteBuf> _loader)
{
Instance = this;
_dataList = new List<{{cs_define_type value_type}}>();
_dataLoader = new System.Func<ByteBuf>(()=> _loader(_tbName));
{{~if x.is_union_index~}}
_dataMapUnion = new {{cs_table_union_map_type_name x}}();
_indexMap = new Dictionary<({{cs_table_get_param_def_list x}}),int>();
{{key_value ='('}}
for (int i = _buf.ReadSize(); i > 0; i--)
{
{{~for idx in x.index_list~}}
{{field_name = 'key'+for.index}}
{{cs_define_type idx.type}} {{field_name}};
{{cs_deserialize '_buf' field_name idx.type}}
{{~if for.last~}}
{{key_value=key_value+field_name+')'}}
{{~else~}}
{{key_value=key_value+field_name+', '}}
{{~end~}}
{{~end~}}
_indexMap.Add({{key_value}}, _buf.ReadInt());
}
Indexes = _indexMap.Keys.ToList();
{{~else if !x.index_list.empty?~}}
{{~for idx in x.index_list~}}
_dataMap_{{idx.index_field.name}} = new Dictionary<{{cs_define_type idx.type}}, {{cs_define_type value_type}}>();
_indexMap_{{idx.index_field.name}} = new Dictionary<{{cs_define_type idx.type}},int>();
{{~end~}}
int size = _buf.ReadSize();
for(int i = 0; i < size; i++)
{
{{~for idx in x.index_list~}}
{{cs_define_type idx.type}} key_{{idx.index_field.name}};
{{cs_deserialize '_buf' 'key_'+idx.index_field.name idx.type}}
{{~end~}}
int index = _buf.ReadInt();
{{~for idx in x.index_list~}}
_indexMap_{{idx.index_field.name}}.Add(key_{{idx.index_field.name}},index);
{{~end~}}
}
{{~for idx in x.index_list~}}
Indexes_{{idx.index_field.name}} = _indexMap_{{idx.index_field.name}}.Keys.ToList();
{{~end~}}
{{~else~}}
_indexMap = new Dictionary<int,int>();
_dataMap = new Dictionary<int, {{cs_define_type value_type}}>();
int size = _buf.ReadSize();
for(int i = 0; i < size; i++)
{
_indexMap.Add(i,_buf.ReadInt());
}
Indexes = _indexMap.Keys.ToList();
{{~end~}}
}
{{~if x.is_union_index~}}
public {{cs_define_type value_type}} Get({{cs_table_get_param_def_list x}})
{
{{cs_define_type value_type}} __v;
if(_dataMapUnion.TryGetValue(({{cs_table_get_param_name_list x}}), out __v))
{
return __v;
}
ResetByteBuf(_indexMap[({{cs_table_get_param_name_list x}})]);
{{cs_deserialize '_buf' '__v' value_type}}
_dataList.Add(__v);
_dataMapUnion.Add(({{cs_table_get_param_name_list x}}), __v);
__v.Resolve(tables);
if(_indexMap.Count == _dataMapUnion.Count)
{
_buf = null;
}
return __v;
}
{{~else if !x.index_list.empty? ~}}
{{~for idx in x.index_list~}}
public {{cs_define_type value_type}} GetBy{{idx.index_field.convention_name}}({{cs_define_type idx.type}} key)
{
if(_dataMap_{{idx.index_field.name}}.TryGetValue(key,out var value))
{
return value;
}
int index = _indexMap_{{idx.index_field.name}}[key];
ResetByteBuf(index);
{{cs_define_type value_type}} _v;
{{cs_deserialize '_buf' '_v' value_type}}
_dataMap_{{idx.index_field.name}}[key] = _v;
_v.Resolve(tables);
return _v;
}
{{~end~}}
{{~else if x.index_list.empty? ~}}
public {{cs_define_type value_type}} this[int index] => Get(index);
public {{cs_define_type value_type}} Get(int index)
{
{{cs_define_type value_type}} _v;
if(_dataMap.TryGetValue(index, out _v))
{
return _v;
}
ResetByteBuf(_indexMap[index]);
{{cs_deserialize '_buf' '_v' value_type}}
_dataMap[index] = _v;
_v.Resolve(tables);
if(_indexMap.Count == _dataMap.Count)
{
_buf = null;
}
return _v;
}
{{~end~}}
{{~else~}}
private {{cs_define_type value_type}} _data;
public {{name}} (ByteBuf _buf, string _tbName, System.Func<string, ByteBuf> _loader)
{
Instance = this;
ByteBuf _dataBuf = _loader(_tbName);
int n = _buf.ReadSize();
int m = _dataBuf.ReadSize();
if (n != 1 || m != 1) throw new SerializationException("table mode=one, but size != 1");
{{cs_deserialize '_dataBuf' '_data' value_type}}
}
{{~ for field in value_type.bean.hierarchy_export_fields ~}}
{{~if field.comment != '' ~}}
/// <summary>
/// {{field.escape_comment}}
/// </summary>
{{~end~}}
public {{cs_define_type field.ctype}} {{field.convention_name}} => _data.{{field.convention_name}};
{{~if field.gen_ref~}}
public {{cs_define_type field.ref_type}} {{field.convention_name}}_Ref => _data.{{field.convention_name}}_Ref;
{{~end~}}
{{~end~}}
{{~end~}}
{{~if x.is_map_table||x.is_list_table ~}}
private void ResetByteBuf(int readerInex = 0)
{
if( _buf == null)
{
if (_buf == null)
{
_buf = _dataLoader();
}
}
_buf.ReaderIndex = readerInex;
}
{{~end~}}
{{~if x.mode != 'ONE'~}}
private ByteBuf _buf = null;
private Dictionary<string, object> tables;
{{~end~}}
public void CacheTables(Dictionary<string, object> _tables)
{
{{~if x.mode == 'ONE'~}}
_data.Resolve(_tables);
{{~else~}}
tables = _tables;
{{~end~}}
}
partial void PostInit();
}
}

View File

@@ -1,40 +0,0 @@
using Bright.Serialization;
{{
name = x.name
namespace = x.namespace
tables = x.tables
}}
namespace {{namespace}}
{
public partial class {{name}}
{
{{~for table in tables ~}}
{{~if table.comment != '' ~}}
/// <summary>
/// {{table.escape_comment}}
/// </summary>
{{~end~}}
public {{table.full_name}} {{table.name}} {get; }
{{~end~}}
public {{name}}(System.Func<string, ByteBuf> idxLoader,System.Func<string, ByteBuf> dataLoader)
{
var tables = new System.Collections.Generic.Dictionary<string, object>();
{{~for table in tables ~}}
{{table.name}} = new {{table.full_name}}(idxLoader("{{table.output_data_file}}"),"{{table.output_data_file}}",dataLoader);
tables.Add("{{table.full_name}}", {{table.name}});
{{~end~}}
PostInit();
{{~for table in tables ~}}
{{table.name}}.CacheTables(tables);
{{~end~}}
}
partial void PostInit();
}
}

View File

@@ -1,95 +0,0 @@
using System.Collections.Generic;
using System.Threading;
using Bright.Serialization;
using Cysharp.Threading.Tasks;
using GameBase;
using GameConfig;
using TEngine;
using UnityEngine;
/// <summary>
/// 配置加载器
/// </summary>
public class ConfigSystem : Singleton<ConfigSystem>
{
private bool _init = false;
private Tables _tables;
public Tables Tables
{
get
{
if (!_init)
{
#if !UNITY_WEBGL
_init = true;
#endif
Log.Error("Config not loaded. You need Take LoadAsync at first.");
}
return _tables;
}
}
private readonly Dictionary<string, TextAsset> _configs = new Dictionary<string, TextAsset>();
/// <summary>
/// 异步加载配置。
/// </summary>
public async UniTask LoadAsync()
{
_tables = new Tables();
await _tables.LoadAsync(LoadByteBufAsync);
_init = true;
}
/// <summary>
/// 异步加载二进制配置。
/// </summary>
/// <param name="file">FileName</param>
/// <returns>ByteBuf</returns>
private async UniTask<ByteBuf> LoadByteBufAsync(string file)
{
#if false
GameTickWatcher gameTickWatcher = new GameTickWatcher();
#endif
byte[] ret;
var location = file;
if (_configs.TryGetValue(location, out var config))
{
ret = config.bytes;
}
else
{
var textAssets = await GameModule.Resource.LoadAssetAsync<TextAsset>(location, CancellationToken.None);
ret = textAssets.bytes;
RegisterTextAssets(file, textAssets);
}
#if false
Log.Warning($"LoadByteBuf {file} used time {gameTickWatcher.ElapseTime()}");
#endif
return new ByteBuf(ret);
}
/// <summary>
/// 注册配置资源。
/// </summary>
/// <param name="key">资源Key。</param>
/// <param name="value">资源实例。</param>
/// <returns>注册成功。</returns>
private bool RegisterTextAssets(string key, TextAsset value)
{
if (string.IsNullOrEmpty(key))
{
return false;
}
if (value == null)
{
return false;
}
_configs[key] = value;
return true;
}
}

View File

@@ -1,115 +0,0 @@
using Bright.Serialization;
using System.Collections.Generic;
{{
name = x.name
parent_def_type = x.parent_def_type
export_fields = x.export_fields
hierarchy_export_fields = x.hierarchy_export_fields
}}
{{cs_start_name_space_grace x.namespace_with_top_module}}
{{~if x.comment != '' ~}}
/// <summary>
/// {{x.escape_comment}}
/// </summary>
{{~end~}}
public {{x.cs_class_modifier}} partial class {{name}} : {{if parent_def_type}} {{x.parent}} {{else}} Bright.Config.BeanBase {{end}}
{
public {{name}}(ByteBuf _buf) {{if parent_def_type}} : base(_buf) {{end}}
{
{{~ for field in export_fields ~}}
{{cs_deserialize '_buf' field.convention_name field.ctype}}
{{~if field.index_field~}}
foreach(var _v in {{field.convention_name}})
{
{{field.convention_name}}_Index.Add(_v.{{field.index_field.convention_name}}, _v);
}
{{~end~}}
{{~end~}}
PostInit();
}
public static {{name}} Deserialize{{name}}(ByteBuf _buf)
{
{{~if x.is_abstract_type~}}
switch (_buf.ReadInt())
{
{{~for child in x.hierarchy_not_abstract_children~}}
case {{child.full_name}}.__ID__: return new {{child.full_name}}(_buf);
{{~end~}}
default: throw new SerializationException();
}
{{~else~}}
return new {{x.full_name}}(_buf);
{{~end~}}
}
{{~ for field in export_fields ~}}
{{~if field.comment != '' ~}}
/// <summary>
/// {{field.escape_comment}}
/// </summary>
{{~end~}}
public {{cs_define_type field.ctype}} {{field.convention_name}} { get; private set; }
{{~if field.index_field~}}
public readonly Dictionary<{{cs_define_type field.index_field.ctype}}, {{cs_define_type field.ctype.element_type}}> {{field.convention_name}}_Index = new Dictionary<{{cs_define_type field.index_field.ctype}}, {{cs_define_type field.ctype.element_type}}>();
{{~end~}}
{{~if field.gen_ref~}}
public {{field.cs_ref_validator_define}}
{{~end~}}
{{~if (gen_datetime_mills field.ctype) ~}}
public long {{field.convention_name}}_Millis => {{field.convention_name}} * 1000L;
{{~end~}}
{{~if field.gen_text_key~}}
public {{cs_define_text_key_field field}} { get; }
{{~end~}}
{{~end~}}
{{~if !x.is_abstract_type~}}
public const int __ID__ = {{x.id}};
public override int GetTypeId() => __ID__;
{{~end~}}
public {{x.cs_method_modifier}} void Resolve(Dictionary<string, object> _tables)
{
{{~if parent_def_type~}}
base.Resolve(_tables);
{{~end~}}
{{~ for field in export_fields ~}}
{{~if field.gen_ref~}}
{{cs_ref_validator_resolve field}}
{{~else if field.has_recursive_ref~}}
{{cs_recursive_resolve field '_tables'}}
{{~end~}}
{{~end~}}
PostResolve();
}
public {{x.cs_method_modifier}} void TranslateText(System.Func<string, string, string> translator)
{
{{~if parent_def_type~}}
base.TranslateText(translator);
{{~end~}}
{{~ for field in export_fields ~}}
{{~if field.gen_text_key~}}
{{cs_translate_text field 'translator'}}
{{~else if field.has_recursive_text~}}
{{cs_recursive_translate_text field 'translator'}}
{{~end~}}
{{~end~}}
}
public override string ToString()
{
return "{{full_name}}{ "
{{~for field in hierarchy_export_fields ~}}
+ "{{field.convention_name}}:" + {{cs_to_string field.convention_name field.ctype}} + ","
{{~end~}}
+ "}";
}
partial void PostInit();
partial void PostResolve();
}
{{cs_end_name_space_grace x.namespace_with_top_module}}

View File

@@ -1,173 +0,0 @@
using Bright.Serialization;
using System.Collections.Generic;
{{cs_start_name_space_grace x.namespace_with_top_module}}
{{
name = x.name
key_type = x.key_ttype
key_type1 = x.key_ttype1
key_type2 = x.key_ttype2
value_type = x.value_ttype
}}
{{~if x.comment != '' ~}}
/// <summary>
/// {{x.escape_comment}}
/// </summary>
{{~end~}}
public partial class {{name}}
{
{{~if x.is_map_table ~}}
private readonly Dictionary<{{cs_define_type key_type}}, {{cs_define_type value_type}}> _dataMap;
private readonly List<{{cs_define_type value_type}}> _dataList;
public {{name}}(ByteBuf _buf)
{
_dataMap = new Dictionary<{{cs_define_type key_type}}, {{cs_define_type value_type}}>();
_dataList = new List<{{cs_define_type value_type}}>();
for(int n = _buf.ReadSize() ; n > 0 ; --n)
{
{{cs_define_type value_type}} _v;
{{cs_deserialize '_buf' '_v' value_type}}
_dataList.Add(_v);
_dataMap.Add(_v.{{x.index_field.convention_name}}, _v);
}
PostInit();
}
public Dictionary<{{cs_define_type key_type}}, {{cs_define_type value_type}}> DataMap => _dataMap;
public List<{{cs_define_type value_type}}> DataList => _dataList;
{{~if value_type.is_dynamic~}}
public T GetOrDefaultAs<T>({{cs_define_type key_type}} key) where T : {{cs_define_type value_type}} => _dataMap.TryGetValue(key, out var v) ? (T)v : null;
public T GetAs<T>({{cs_define_type key_type}} key) where T : {{cs_define_type value_type}} => (T)_dataMap[key];
{{~end~}}
public {{cs_define_type value_type}} GetOrDefault({{cs_define_type key_type}} key) => _dataMap.TryGetValue(key, out var v) ? v : null;
public {{cs_define_type value_type}} Get({{cs_define_type key_type}} key) => _dataMap[key];
public {{cs_define_type value_type}} this[{{cs_define_type key_type}} key] => _dataMap[key];
public void Resolve(Dictionary<string, object> _tables)
{
foreach(var v in _dataList)
{
v.Resolve(_tables);
}
PostResolve();
}
public void TranslateText(System.Func<string, string, string> translator)
{
foreach(var v in _dataList)
{
v.TranslateText(translator);
}
}
{{~else if x.is_list_table ~}}
private readonly List<{{cs_define_type value_type}}> _dataList;
{{~if x.is_union_index~}}
private {{cs_table_union_map_type_name x}} _dataMapUnion;
{{~else if !x.index_list.empty?~}}
{{~for idx in x.index_list~}}
private Dictionary<{{cs_define_type idx.type}}, {{cs_define_type value_type}}> _dataMap_{{idx.index_field.name}};
{{~end~}}
{{~end~}}
public {{name}}(ByteBuf _buf)
{
_dataList = new List<{{cs_define_type value_type}}>();
for(int n = _buf.ReadSize() ; n > 0 ; --n)
{
{{cs_define_type value_type}} _v;
{{cs_deserialize '_buf' '_v' value_type}}
_dataList.Add(_v);
}
{{~if x.is_union_index~}}
_dataMapUnion = new {{cs_table_union_map_type_name x}}();
foreach(var _v in _dataList)
{
_dataMapUnion.Add(({{cs_table_key_list x "_v"}}), _v);
}
{{~else if !x.index_list.empty?~}}
{{~for idx in x.index_list~}}
_dataMap_{{idx.index_field.name}} = new Dictionary<{{cs_define_type idx.type}}, {{cs_define_type value_type}}>();
{{~end~}}
foreach(var _v in _dataList)
{
{{~for idx in x.index_list~}}
_dataMap_{{idx.index_field.name}}.Add(_v.{{idx.index_field.convention_name}}, _v);
{{~end~}}
}
{{~end~}}
PostInit();
}
public List<{{cs_define_type value_type}}> DataList => _dataList;
{{~if x.is_union_index~}}
public {{cs_define_type value_type}} Get({{cs_table_get_param_def_list x}}) => _dataMapUnion.TryGetValue(({{cs_table_get_param_name_list x}}), out {{cs_define_type value_type}} __v) ? __v : null;
{{~else if !x.index_list.empty? ~}}
{{~for idx in x.index_list~}}
public {{cs_define_type value_type}} GetBy{{idx.index_field.convention_name}}({{cs_define_type idx.type}} key) => _dataMap_{{idx.index_field.name}}.TryGetValue(key, out {{cs_define_type value_type}} __v) ? __v : null;
{{~end~}}
{{~end~}}
public void Resolve(Dictionary<string, object> _tables)
{
foreach(var v in _dataList)
{
v.Resolve(_tables);
}
PostResolve();
}
public void TranslateText(System.Func<string, string, string> translator)
{
foreach(var v in _dataList)
{
v.TranslateText(translator);
}
}
{{~else~}}
private readonly {{cs_define_type value_type}} _data;
public {{name}}(ByteBuf _buf)
{
int n = _buf.ReadSize();
if (n != 1) throw new SerializationException("table mode=one, but size != 1");
{{cs_deserialize '_buf' '_data' value_type}}
PostInit();
}
{{~ for field in value_type.bean.hierarchy_export_fields ~}}
{{~if field.comment != '' ~}}
/// <summary>
/// {{field.escape_comment}}
/// </summary>
{{~end~}}
public {{cs_define_type field.ctype}} {{field.convention_name}} => _data.{{field.convention_name}};
{{~end~}}
public void Resolve(Dictionary<string, object> _tables)
{
_data.Resolve(_tables);
PostResolve();
}
public void TranslateText(System.Func<string, string, string> translator)
{
_data.TranslateText(translator);
}
{{~end~}}
partial void PostInit();
partial void PostResolve();
}
{{cs_end_name_space_grace x.namespace_with_top_module}}

View File

@@ -1,53 +0,0 @@
using Bright.Serialization;
using Cysharp.Threading.Tasks;
using System.Collections.Generic;
{{
name = x.name
namespace = x.namespace
tables = x.tables
}}
namespace {{namespace}}
{
public sealed class {{name}}
{
{{~for table in tables ~}}
{{~if table.comment != '' ~}}
/// <summary>
/// {{table.escape_comment}}
/// </summary>
{{~end~}}
public {{table.full_name}} {{table.name}} {get; private set; }
{{~end~}}
public {{name}}() { }
public async UniTask LoadAsync(System.Func<string, UniTask<ByteBuf>> loader)
{
var tables = new System.Collections.Generic.Dictionary<string, object>();
List<UniTask> list = new List<UniTask>();
{{~for table in tables ~}}
list.Add(UniTask.Create(async () =>
{
{{table.name}} = new {{table.full_name}}(await loader("{{table.output_data_file}}"));
tables.Add("{{table.full_name}}", {{table.name}});
}));
{{~end~}}
await UniTask.WhenAll(list);
{{~for table in tables ~}}
{{table.name}}.Resolve(tables);
{{~end~}}
}
public void TranslateText(System.Func<string, string, string> translator)
{
{{~for table in tables ~}}
{{table.name}}.TranslateText(translator);
{{~end~}}
}
}
}

View File

@@ -1,115 +0,0 @@
using Bright.Serialization;
using System.Collections.Generic;
{{
name = x.name
parent_def_type = x.parent_def_type
export_fields = x.export_fields
hierarchy_export_fields = x.hierarchy_export_fields
}}
{{cs_start_name_space_grace x.namespace_with_top_module}}
{{~if x.comment != '' ~}}
/// <summary>
/// {{x.escape_comment}}
/// </summary>
{{~end~}}
public {{x.cs_class_modifier}} partial class {{name}} : {{if parent_def_type}} {{x.parent}} {{else}} Bright.Config.BeanBase {{end}}
{
public {{name}}(ByteBuf _buf) {{if parent_def_type}} : base(_buf) {{end}}
{
{{~ for field in export_fields ~}}
{{cs_deserialize '_buf' field.convention_name field.ctype}}
{{~if field.index_field~}}
foreach(var _v in {{field.convention_name}})
{
{{field.convention_name}}_Index.Add(_v.{{field.index_field.convention_name}}, _v);
}
{{~end~}}
{{~end~}}
PostInit();
}
public static {{name}} Deserialize{{name}}(ByteBuf _buf)
{
{{~if x.is_abstract_type~}}
switch (_buf.ReadInt())
{
{{~for child in x.hierarchy_not_abstract_children~}}
case {{child.full_name}}.__ID__: return new {{child.full_name}}(_buf);
{{~end~}}
default: throw new SerializationException();
}
{{~else~}}
return new {{x.full_name}}(_buf);
{{~end~}}
}
{{~ for field in export_fields ~}}
{{~if field.comment != '' ~}}
/// <summary>
/// {{field.escape_comment}}
/// </summary>
{{~end~}}
public {{cs_define_type field.ctype}} {{field.convention_name}} { get; private set; }
{{~if field.index_field~}}
public readonly Dictionary<{{cs_define_type field.index_field.ctype}}, {{cs_define_type field.ctype.element_type}}> {{field.convention_name}}_Index = new Dictionary<{{cs_define_type field.index_field.ctype}}, {{cs_define_type field.ctype.element_type}}>();
{{~end~}}
{{~if field.gen_ref~}}
public {{field.cs_ref_validator_define}}
{{~end~}}
{{~if (gen_datetime_mills field.ctype) ~}}
public long {{field.convention_name}}_Millis => {{field.convention_name}} * 1000L;
{{~end~}}
{{~if field.gen_text_key~}}
public {{cs_define_text_key_field field}} { get; }
{{~end~}}
{{~end~}}
{{~if !x.is_abstract_type~}}
public const int __ID__ = {{x.id}};
public override int GetTypeId() => __ID__;
{{~end~}}
public {{x.cs_method_modifier}} void Resolve(Dictionary<string, object> _tables)
{
{{~if parent_def_type~}}
base.Resolve(_tables);
{{~end~}}
{{~ for field in export_fields ~}}
{{~if field.gen_ref~}}
{{cs_ref_validator_resolve field}}
{{~else if field.has_recursive_ref~}}
{{cs_recursive_resolve field '_tables'}}
{{~end~}}
{{~end~}}
PostResolve();
}
public {{x.cs_method_modifier}} void TranslateText(System.Func<string, string, string> translator)
{
{{~if parent_def_type~}}
base.TranslateText(translator);
{{~end~}}
{{~ for field in export_fields ~}}
{{~if field.gen_text_key~}}
{{cs_translate_text field 'translator'}}
{{~else if field.has_recursive_text~}}
{{cs_recursive_translate_text field 'translator'}}
{{~end~}}
{{~end~}}
}
public override string ToString()
{
return "{{full_name}}{ "
{{~for field in hierarchy_export_fields ~}}
+ "{{field.convention_name}}:" + {{cs_to_string field.convention_name field.ctype}} + ","
{{~end~}}
+ "}";
}
partial void PostInit();
partial void PostResolve();
}
{{cs_end_name_space_grace x.namespace_with_top_module}}

View File

@@ -1,173 +0,0 @@
using Bright.Serialization;
using System.Collections.Generic;
{{cs_start_name_space_grace x.namespace_with_top_module}}
{{
name = x.name
key_type = x.key_ttype
key_type1 = x.key_ttype1
key_type2 = x.key_ttype2
value_type = x.value_ttype
}}
{{~if x.comment != '' ~}}
/// <summary>
/// {{x.escape_comment}}
/// </summary>
{{~end~}}
public partial class {{name}}
{
{{~if x.is_map_table ~}}
private readonly Dictionary<{{cs_define_type key_type}}, {{cs_define_type value_type}}> _dataMap;
private readonly List<{{cs_define_type value_type}}> _dataList;
public {{name}}(ByteBuf _buf)
{
_dataMap = new Dictionary<{{cs_define_type key_type}}, {{cs_define_type value_type}}>();
_dataList = new List<{{cs_define_type value_type}}>();
for(int n = _buf.ReadSize() ; n > 0 ; --n)
{
{{cs_define_type value_type}} _v;
{{cs_deserialize '_buf' '_v' value_type}}
_dataList.Add(_v);
_dataMap.Add(_v.{{x.index_field.convention_name}}, _v);
}
PostInit();
}
public Dictionary<{{cs_define_type key_type}}, {{cs_define_type value_type}}> DataMap => _dataMap;
public List<{{cs_define_type value_type}}> DataList => _dataList;
{{~if value_type.is_dynamic~}}
public T GetOrDefaultAs<T>({{cs_define_type key_type}} key) where T : {{cs_define_type value_type}} => _dataMap.TryGetValue(key, out var v) ? (T)v : null;
public T GetAs<T>({{cs_define_type key_type}} key) where T : {{cs_define_type value_type}} => (T)_dataMap[key];
{{~end~}}
public {{cs_define_type value_type}} GetOrDefault({{cs_define_type key_type}} key) => _dataMap.TryGetValue(key, out var v) ? v : null;
public {{cs_define_type value_type}} Get({{cs_define_type key_type}} key) => _dataMap[key];
public {{cs_define_type value_type}} this[{{cs_define_type key_type}} key] => _dataMap[key];
public void Resolve(Dictionary<string, object> _tables)
{
foreach(var v in _dataList)
{
v.Resolve(_tables);
}
PostResolve();
}
public void TranslateText(System.Func<string, string, string> translator)
{
foreach(var v in _dataList)
{
v.TranslateText(translator);
}
}
{{~else if x.is_list_table ~}}
private readonly List<{{cs_define_type value_type}}> _dataList;
{{~if x.is_union_index~}}
private {{cs_table_union_map_type_name x}} _dataMapUnion;
{{~else if !x.index_list.empty?~}}
{{~for idx in x.index_list~}}
private Dictionary<{{cs_define_type idx.type}}, {{cs_define_type value_type}}> _dataMap_{{idx.index_field.name}};
{{~end~}}
{{~end~}}
public {{name}}(ByteBuf _buf)
{
_dataList = new List<{{cs_define_type value_type}}>();
for(int n = _buf.ReadSize() ; n > 0 ; --n)
{
{{cs_define_type value_type}} _v;
{{cs_deserialize '_buf' '_v' value_type}}
_dataList.Add(_v);
}
{{~if x.is_union_index~}}
_dataMapUnion = new {{cs_table_union_map_type_name x}}();
foreach(var _v in _dataList)
{
_dataMapUnion.Add(({{cs_table_key_list x "_v"}}), _v);
}
{{~else if !x.index_list.empty?~}}
{{~for idx in x.index_list~}}
_dataMap_{{idx.index_field.name}} = new Dictionary<{{cs_define_type idx.type}}, {{cs_define_type value_type}}>();
{{~end~}}
foreach(var _v in _dataList)
{
{{~for idx in x.index_list~}}
_dataMap_{{idx.index_field.name}}.Add(_v.{{idx.index_field.convention_name}}, _v);
{{~end~}}
}
{{~end~}}
PostInit();
}
public List<{{cs_define_type value_type}}> DataList => _dataList;
{{~if x.is_union_index~}}
public {{cs_define_type value_type}} Get({{cs_table_get_param_def_list x}}) => _dataMapUnion.TryGetValue(({{cs_table_get_param_name_list x}}), out {{cs_define_type value_type}} __v) ? __v : null;
{{~else if !x.index_list.empty? ~}}
{{~for idx in x.index_list~}}
public {{cs_define_type value_type}} GetBy{{idx.index_field.convention_name}}({{cs_define_type idx.type}} key) => _dataMap_{{idx.index_field.name}}.TryGetValue(key, out {{cs_define_type value_type}} __v) ? __v : null;
{{~end~}}
{{~end~}}
public void Resolve(Dictionary<string, object> _tables)
{
foreach(var v in _dataList)
{
v.Resolve(_tables);
}
PostResolve();
}
public void TranslateText(System.Func<string, string, string> translator)
{
foreach(var v in _dataList)
{
v.TranslateText(translator);
}
}
{{~else~}}
private readonly {{cs_define_type value_type}} _data;
public {{name}}(ByteBuf _buf)
{
int n = _buf.ReadSize();
if (n != 1) throw new SerializationException("table mode=one, but size != 1");
{{cs_deserialize '_buf' '_data' value_type}}
PostInit();
}
{{~ for field in value_type.bean.hierarchy_export_fields ~}}
{{~if field.comment != '' ~}}
/// <summary>
/// {{field.escape_comment}}
/// </summary>
{{~end~}}
public {{cs_define_type field.ctype}} {{field.convention_name}} => _data.{{field.convention_name}};
{{~end~}}
public void Resolve(Dictionary<string, object> _tables)
{
_data.Resolve(_tables);
PostResolve();
}
public void TranslateText(System.Func<string, string, string> translator)
{
_data.TranslateText(translator);
}
{{~end~}}
partial void PostInit();
partial void PostResolve();
}
{{cs_end_name_space_grace x.namespace_with_top_module}}

View File

@@ -1,46 +0,0 @@
using Bright.Serialization;
using System.Threading.Tasks;
{{
name = x.name
namespace = x.namespace
tables = x.tables
}}
namespace {{namespace}}
{
public sealed class {{name}}
{
{{~for table in tables ~}}
{{~if table.comment != '' ~}}
/// <summary>
/// {{table.escape_comment}}
/// </summary>
{{~end~}}
public {{table.full_name}} {{table.name}} {get; private set; }
{{~end~}}
public {{name}}() { }
public async Task LoadAsync(System.Func<string, Task<ByteBuf>> loader)
{
var tables = new System.Collections.Generic.Dictionary<string, object>();
{{~for table in tables ~}}
{{table.name}} = new {{table.full_name}}(await loader("{{table.output_data_file}}"));
tables.Add("{{table.full_name}}", {{table.name}});
{{~end~}}
{{~for table in tables ~}}
{{table.name}}.Resolve(tables);
{{~end~}}
}
public void TranslateText(System.Func<string, string, string> translator)
{
{{~for table in tables ~}}
{{table.name}}.TranslateText(translator);
{{~end~}}
}
}
}

View File

@@ -1,36 +0,0 @@
<module name="Battle">
<enum name="ActorAttrDataType">
<var name="None" alias="无效数据" value="0"/>
<var name="MaxHp" alias="最大血量" value="1"/>
<var name="Attack" alias="攻击力" value="2"/>
<var name="PhyDamage" alias="物理伤害" value="3"/>
<var name="PhyDef" alias="物理防御" value="4"/>
<var name="MagicDamage" alias="法术伤害" value="5"/>
<var name="MagicDef" alias="法术防御" value="6"/>
<var name="MoveSpeed" alias="移动速度" value="7"/>
<var name="AttackSpeed" alias="攻击速度" value="8"/>
<var name="Hit" alias="命中率" value="9"/>
<var name="Dodge" alias="闪避率" value="10"/>
<var name="CriticalAtkRatio" alias="暴击率" value="11"/>
<var name="SanValue" alias="San值(疯狂值)" value="12"/>
<var name="MaxMp" alias="最大MP" value="13"/>
<var name="PhyDamageRatio" alias="物理伤害倍率" value="14"/>
<var name="MagicDamageRatio" alias="魔法伤害倍率" value="15"/>
<var name="CriticalRatio" alias="暴击倍率" value="16"/>
<var name="CriticalReduce" alias="暴击减免" value="17"/>
</enum>
<enum name="ActorAttrAddType">
<var name="NONE" alias="无效数据" value="0"/>
<var name="ABSOLUTE_VAL" alias="加法计算" value="1"/>
<var name="SUM_PERCENT_VAL" alias="多个项结果累加,然后对加法做乘法" value="2"/>
<var name="MUL_PERCENT_VAL" alias="每一项都是对最终结果做乘法" value="3"/>
</enum>
<bean name="ResAttrImpactData" sep="," parent="">
<var name="DataType" type="ActorAttrDataType"/>
<var name="AddType" type="ActorAttrAddType"/>
<var name="Value" type="float"/>
</bean>
</module>

View File

@@ -1,68 +0,0 @@
<module name="Battle">
<enum name="BuffTimeType">
<var name="BUFF_TIME_DURING" alias="指定持续时间" value="0"/>
<var name="BUFF_TIME_INFINIT" alias="无尽时间" value="1"/>
</enum>
<enum name="BuffReplaceType">
<var name="BUFF_REPLACE_INSTEAD" alias="更新时间范围" value="0"/>
<var name="BUFF_REPLACE_FORBIT" alias="不允许叠加" value="1"/>
<var name="BUFF_REPLACE_ADD_TIME" alias="累加时间范围" value="2"/>
<var name="BUFF_REPLACE_ADD_ATTR" alias="叠加数值" value="3"/>
<var name="BUFF_REPLACE_TYPE_COUNT" alias="叠加种类" value="4"/>
</enum>
<enum name="BuffStateID">
<var name="BUFF_STATE_NONE" alias="无状态" value="0"/>
<var name="BUFF_STATE_STUN" alias="眩晕状态" value="1"/>
<var name="BUFF_STATE_UNDEAD" alias="无敌状态" value="2"/>
<var name="BUFF_STATE_INVISIBLE" alias="隐身状态" value="3"/>
<var name="BUFF_STATE_BIGGER" alias="体形变大" value="4"/>
<var name="BUFF_STATE_NO_MOVE" alias="定身,不能移动" value="5"/>
<var name="BUFF_STATE_NO_SKILL" alias="沉默,不能放技能" value="6"/>
<var name="BUFF_STATE_SLEEP" alias="昏睡" value="7"/>
<var name="BUFF_STATE_FORCE_COLLIDER" alias="强制开启阻挡" value="8"/>
<var name="BUFF_STATE_IGNORE_COLLIDER" alias="无视阻挡" value="9"/>
<var name="BUFF_STATE_MAX" alias="最大状态" value="10"/>
</enum>
<enum name="BuffResultType">
<var name="BUFF_RESULT_NONE" alias="无" value="0"/>
<var name="BUFF_RESULT_PHY_ATK_UP" alias="物理攻击提升" value="1"/>
<var name="BUFF_RESULT_PHY_ATK_DOWN" alias="物理攻击降低" value="2"/>
<var name="BUFF_RESULT_PHY_DEF_UP" alias="物理防御提升" value="3"/>
<var name="BUFF_RESULT_PHY_DEF_DOWN" alias="物理防御降低" value="4"/>
<var name="BUFF_RESULT_PHY_HIT_UP" alias="物理命中提升" value="5"/>
<var name="BUFF_RESULT_PHY_HIT_DOWN" alias="物理命中降低" value="6"/>
<var name="BUFF_RESULT_PHY_LOSE_HP" alias="物理持续掉血" value="7"/>
<var name="BUFF_RESULT_MAG_ATK_UP" alias="法术攻击提升" value="8"/>
<var name="BUFF_RESULT_MAG_ATK_DOWN" alias="法术攻击降低" value="9"/>
<var name="BUFF_RESULT_MAG_DEF_UP" alias="法术防御提升" value="10"/>
<var name="BUFF_RESULT_MAG_DEF_DOWN" alias="法术防御降低" value="11"/>
<var name="BUFF_RESULT_MAG_HIT_UP" alias="法术命中提升" value="12"/>
<var name="BUFF_RESULT_MAG_HIT_DOWN" alias="法术命中降低" value="13"/>
<var name="BUFF_RESULT_MAG_LOSE_HP" alias="法术持续掉血" value="14"/>
<var name="BUFF_RESULT_CIRT_UP" alias="暴击率提升" value="15"/>
<var name="BUFF_RESULT_CIRT_DOWN" alias="暴击率降低" value="16"/>
<var name="BUFF_RESULT_CIRT_VALUE_UP" alias="暴击倍率提升" value="17"/>
<var name="BUFF_RESULT_CIRT_VALUE_DOWN" alias="暴击倍率降低" value="18"/>
<var name="BUFF_RESULT_MOVE_SPEED_UP" alias="移速提升" value="19"/>
<var name="BUFF_RESULT_MOVE_SPEED_DOWN" alias="移速降低" value="20"/>
</enum>
<bean name="BuffTriggleState" sep="," parent="">
<var name="StateID" type="BuffStateID"/>
<var name="StateParam" type="float"/>
</bean>
<bean name="BuffDotTickConfig" sep="," parent="">
<!-- 触发间隔,如果为0, 则只加一次 -->
<var name="TickTime" type="float"/>
<!-- 1增加buff的时候立刻触发,否则等待TickTime后再触发 -->
<var name="TickWhenAdd" type="int"/>
</bean>
</module>

View File

@@ -1,25 +0,0 @@
<module name="Battle">
<enum name="SkillMagicType"> 技能元素类型
<var name="SKILL_TYPE_NONE" alias="无类型" value="0"/>
<var name="SKILL_TYPE_DMG_PHY" alias="物理伤害属性" value="1"/>
<var name="SKILL_TYPE_DMG_MAGIC" alias="魔法伤害属性" value="2"/>
</enum>
<enum name="SkillAttrDamageType"> 伤害类型
<var name="ATTR_TYPE_NONE" alias="无数值" value="0"/>
<var name="ATTR_TYPE_DMG_WEAPON" alias="按释放者的伤害类型*X%+固定值计算,目标有防御计算" value="1"/>
<var name="ATTR_TYPE_DMG_NO_DEFEND" alias="按释放者的伤害类型*X%+固定值计算(无视目标的防御)" value="2"/>
<var name="ATTR_TYPE_DMG_TARGET_HP_NO_DEFEND" alias="按受击者的气血上限*X%+固定值计算(无视目标的防御)" value="3"/>
<var name="ATTR_TYPE_HP_AS_ATK" alias="按释放者的攻击类型*X%+固定值计算,恢复当前生命" value="4"/>
<var name="ATTR_TYPE_HP_RATIO" alias="按受击者的HP上限*X%+固定值计算,恢复当前生命" value="5"/>
</enum>
<bean name="SkillAttrDamageData" sep="," parent="">
<var name="MagicType" type="SkillMagicType"/>
<var name="AttrType" type="SkillAttrDamageType"/>
<var name="Param1" type="float"/>
<var name="Param2" type="float"/>
<var name="Param3" type="float"/>
<var name="MaxLimit" type="float"/>
</bean>
</module>

View File

@@ -1,23 +0,0 @@
<root>
<topmodule name="GameConfig"/>
<externalselector name="unity"/>
<patch name="cn"/>
<patch name="en"/>
<group name="c,client" default="1"/> client
<group name="s,server" default="1"/> server
<group name="e" default="1"/> editor
<import name="."/>
<importexcel name="__tables__.xlsx" type="table"/> 相对data目录
<importexcel name="__enums__.xlsx" type="enum"/>相对data目录
<importexcel name="__beans__.xlsx" type="bean"/>相对data目录
<service name="server" manager="Tables" group="s"/>
<service name="client" manager="Tables" group="c"/>
<service name="all" manager="Tables" group="c,s,e"/>
</root>

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1,58 @@
using Luban;
using GameConfig;
using TEngine;
using UnityEngine;
/// <summary>
/// 配置加载器。
/// </summary>
public class ConfigSystem
{
private static ConfigSystem _instance;
public static ConfigSystem Instance => _instance ??= new ConfigSystem();
private bool _init = false;
private Tables _tables;
public Tables Tables
{
get
{
if (!_init)
{
Load();
}
return _tables;
}
}
private IResourceModule _resourceModule;
/// <summary>
/// 加载配置。
/// </summary>
public void Load()
{
_tables = new Tables(LoadByteBuf);
_init = true;
}
/// <summary>
/// 加载二进制配置。
/// </summary>
/// <param name="file">FileName</param>
/// <returns>ByteBuf</returns>
private ByteBuf LoadByteBuf(string file)
{
if (_resourceModule == null)
{
_resourceModule = ModuleSystem.GetModule<IResourceModule>();
}
TextAsset textAsset = _resourceModule.LoadAsset<TextAsset>(file);
byte[] bytes = textAsset.bytes;
return new ByteBuf(bytes);
}
}

View File

@@ -0,0 +1,55 @@
using Luban;
{{namespace_with_grace_begin __namespace}}
public partial class {{__name}}
{
#region The Tables
{{~for table in __tables ~}}
{{~if table.comment != '' ~}}
/// <summary>
/// {{escape_comment table.comment}}
/// </summary>
{{~end~}}
private {{table.full_name}} m_{{table.name}};
public {{table.full_name}} {{format_property_name __code_style table.name}}
{
get
{
if (m_{{table.name}} == null)
{
m_{{table.name}} = new {{table.full_name}}(defaultLoader("{{table.output_data_file}}"));
m_{{table.name}}.ResolveRef(this);
}
return m_{{table.name}};
}
set
{
m_{{table.name}} = value;
m_{{table.name}}.ResolveRef(this);
}
}
{{~end~}}
#endregion
System.Func<string, ByteBuf> defaultLoader;
public {{__name}}(System.Func<string, ByteBuf> loader)
{
SetDefaultLoader(loader);
Init();
}
public void SetDefaultLoader(System.Func<string, ByteBuf> loader)
{
defaultLoader = null;
defaultLoader = loader;
}
//public partial void Init();
public void Init(){}
}
{{namespace_with_grace_end __namespace}}

View File

@@ -0,0 +1,29 @@
using UnityEngine;
public static class ExternalTypeUtil
{
public static Vector2 NewVector2(GameConfig.vector2 v)
{
return new Vector2(v.X, v.Y);
}
public static Vector3 NewVector3(GameConfig.vector3 v)
{
return new Vector3(v.X, v.Y, v.Z);
}
public static Vector4 NewVector4(GameConfig.vector4 v)
{
return new Vector4(v.X, v.Y, v.Z, v.W);
}
public static Vector2Int NewVector2Int(GameConfig.vector2int v)
{
return new Vector2Int(v.X, v.Y);
}
public static Vector3Int NewVector3Int(GameConfig.vector3int v)
{
return new Vector3Int(v.X, v.Y, v.Z);
}
}

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1,46 @@
<module name="">
<bean name="vector2" valueType="1" sep=",">
<var name="x" type="float" />
<var name="y" type="float" />
<mapper target="client" codeTarget="cs-bin,cs-simple-json,cs-newtonsoft-json">
<option name="type" value="UnityEngine.Vector2" />
<option name="constructor" value="ExternalTypeUtil.NewVector2" />
</mapper>
</bean>
<bean name="vector3" valueType="1" sep=",">
<var name="x" type="float" />
<var name="y" type="float" />
<var name="z" type="float" />
<mapper target="client" codeTarget="cs-bin,cs-simple-json,cs-newtonsoft-json">
<option name="type" value="UnityEngine.Vector3" />
<option name="constructor" value="ExternalTypeUtil.NewVector3" />
</mapper>
</bean>
<bean name="vector4" valueType="1" sep=",">
<var name="x" type="float" />
<var name="y" type="float" />
<var name="z" type="float" />
<var name="w" type="float" />
<mapper target="client" codeTarget="cs-bin,cs-simple-json,cs-newtonsoft-json">
<option name="type" value="UnityEngine.Vector4" />
<option name="constructor" value="ExternalTypeUtil.NewVector4" />
</mapper>
</bean>
<bean name="vector2int" valueType="1" sep=",">
<var name="x" type="int" />
<var name="y" type="int" />
<mapper target="client" codeTarget="cs-bin,cs-simple-json,cs-newtonsoft-json">
<option name="type" value="UnityEngine.Vector2Int" />
<option name="constructor" value="ExternalTypeUtil.NewVector2Int" />
</mapper>
</bean>
<bean name="vector3int" valueType="1" sep=",">
<var name="x" type="int" />
<var name="y" type="int" />
<var name="z" type="int" />
<mapper target="client" codeTarget="cs-bin,cs-simple-json,cs-newtonsoft-json">
<option name="type" value="UnityEngine.Vector3" />
<option name="constructor" value="ExternalTypeUtil.NewVector3" />
</mapper>
</bean>
</module>

View File

@@ -0,0 +1,22 @@
Cd /d %~dp0
echo %CD%
set WORKSPACE=../..
set LUBAN_DLL=%WORKSPACE%\Tools\Luban\Luban.dll
set CONF_ROOT=.
set DATA_OUTPATH=%WORKSPACE%/UnityProject/Assets/AssetRaw/Configs/bytes/
set CODE_OUTPATH=%WORKSPACE%/UnityProject/Assets/GameScripts/HotFix/GameProto/GameConfig/
xcopy /s /e /i /y "%CONF_ROOT%\CustomTemplate\ConfigSystem.cs" "%WORKSPACE%\UnityProject\Assets\GameScripts\HotFix\GameProto\ConfigSystem.cs"
xcopy /s /e /i /y "%CONF_ROOT%\CustomTemplate\ExternalTypeUtil.cs" "%WORKSPACE%\UnityProject\Assets\GameScripts\HotFix\GameProto\ExternalTypeUtil.cs"
dotnet %LUBAN_DLL% ^
-t client ^
-c cs-bin ^
-d bin^
--conf %CONF_ROOT%\luban.conf ^
-x code.lineEnding=crlf ^
-x outputCodeDir=%CODE_OUTPATH% ^
-x outputDataDir=%DATA_OUTPATH%
pause

View File

@@ -0,0 +1,24 @@
#!/bin/bash
cd "$(dirname "$0")"
echo "当前目录: $(pwd)"
export WORKSPACE="$(realpath ../../)"
export LUBAN_DLL="${WORKSPACE}/Tools/Luban/Luban.dll"
export CONF_ROOT="$(pwd)"
export DATA_OUTPATH="${WORKSPACE}/UnityProject/Assets/AssetRaw/Configs/bytes/"
export CODE_OUTPATH="${WORKSPACE}/UnityProject/Assets/GameScripts/HotFix/GameProto/GameConfig/"
cp -R "${CONF_ROOT}/CustomTemplate/ConfigSystem.cs" \
"${WORKSPACE}/UnityProject/Assets/GameScripts/HotFix/GameProto/ConfigSystem.cs"
cp -R "${CONF_ROOT}/CustomTemplate/ExternalTypeUtil.cs" \
"${WORKSPACE}/UnityProject/Assets/GameScripts/HotFix/GameProto/ExternalTypeUtil.cs"
dotnet "${LUBAN_DLL}" \
-t client \
-c cs-bin \
-d bin \
--conf "${CONF_ROOT}/luban.conf" \
-x code.lineEnding=crlf \
-x outputCodeDir="${CODE_OUTPATH}" \
-x outputDataDir="${DATA_OUTPATH}"

View File

@@ -0,0 +1,23 @@
Cd /d %~dp0
echo %CD%
set WORKSPACE=../..
set LUBAN_DLL=%WORKSPACE%\Tools\Luban\Luban.dll
set CONF_ROOT=.
set DATA_OUTPATH=%WORKSPACE%/UnityProject/Assets/AssetRaw/Configs/bytes/
set CODE_OUTPATH=%WORKSPACE%/UnityProject/Assets/GameScripts/HotFix/GameProto/GameConfig/
xcopy /s /e /i /y "%CONF_ROOT%\CustomTemplate\ConfigSystem.cs" "%WORKSPACE%\UnityProject\Assets\GameScripts\HotFix\GameProto\ConfigSystem.cs"
xcopy /s /e /i /y "%CONF_ROOT%\CustomTemplate\ExternalTypeUtil.cs" "%WORKSPACE%\UnityProject\Assets\GameScripts\HotFix\GameProto\ExternalTypeUtil.cs"
dotnet %LUBAN_DLL% ^
-t client ^
-c cs-bin ^
-d bin^
--conf %CONF_ROOT%\luban.conf ^
--customTemplateDir %CONF_ROOT%\CustomTemplate\CustomTemplate_Client_LazyLoad ^
-x code.lineEnding=crlf ^
-x outputCodeDir=%CODE_OUTPATH% ^
-x outputDataDir=%DATA_OUTPATH%
pause

View File

@@ -0,0 +1,25 @@
#!/bin/bash
cd "$(dirname "$0")"
echo "当前目录: $(pwd)"
export WORKSPACE="$(realpath ../../)"
export LUBAN_DLL="${WORKSPACE}/Tools/Luban/Luban.dll"
export CONF_ROOT="$(pwd)"
export DATA_OUTPATH="${WORKSPACE}/UnityProject/Assets/AssetRaw/Configs/bytes/"
export CODE_OUTPATH="${WORKSPACE}/UnityProject/Assets/GameScripts/HotFix/GameProto/GameConfig/"
cp -R "${CONF_ROOT}/CustomTemplate/ConfigSystem.cs" \
"${WORKSPACE}/UnityProject/Assets/GameScripts/HotFix/GameProto/ConfigSystem.cs"
cp -R "${CONF_ROOT}/CustomTemplate/ExternalTypeUtil.cs" \
"${WORKSPACE}/UnityProject/Assets/GameScripts/HotFix/GameProto/ExternalTypeUtil.cs"
dotnet "${LUBAN_DLL}" \
-t client \
-c cs-bin \
-d bin \
--conf "${CONF_ROOT}/luban.conf" \
--customTemplateDir "${CONF_ROOT}/CustomTemplate/CustomTemplate_Client_LazyLoad" \
-x code.lineEnding=crlf \
-x outputCodeDir="${CODE_OUTPATH}" \
-x outputDataDir="${DATA_OUTPATH}"

View File

@@ -0,0 +1,19 @@
Cd /d %~dp0
echo %CD%
set WORKSPACE=../../
set LUBAN_DLL=%WORKSPACE%/Tools/Luban/Luban.dll
set CONF_ROOT=.
set DATA_OUTPATH=%WORKSPACE%/Server/GameConfig
set CODE_OUTPATH=%WORKSPACE%/Server/Hotfix/Config/GameConfig
dotnet %LUBAN_DLL% ^
-t server^
-c cs-bin ^
-d bin^
--conf %CONF_ROOT%\luban.conf ^
-x code.lineEnding=crlf ^
-x outputCodeDir=%CODE_OUTPATH% ^
-x outputDataDir=%DATA_OUTPATH%
pause

View File

@@ -0,0 +1,19 @@
#!/bin/bash
cd "$(dirname "$0")"
echo "当前目录: $(pwd)"
export WORKSPACE="$(realpath ../../)"
export LUBAN_DLL="${WORKSPACE}/Tools/Luban/Luban.dll"
export CONF_ROOT="$(pwd)"
export DATA_OUTPATH="${WORKSPACE}/Server/GameConfig"
export CODE_OUTPATH="${WORKSPACE}/Server/Hotfix/Config/GameConfig"
dotnet "${LUBAN_DLL}" \
-t server \
-c cs-bin \
-d bin \
--conf "${CONF_ROOT}/luban.conf" \
-x code.lineEnding=crlf \
-x outputCodeDir="${CODE_OUTPATH}" \
-x outputDataDir="${DATA_OUTPATH}"

View File

@@ -0,0 +1,22 @@
{
"groups":
[
{"names":["c"], "default":true},
{"names":["s"], "default":true},
{"names":["e"], "default":true}
],
"schemaFiles":
[
{"fileName":"Defines", "type":""},
{"fileName":"Datas/__tables__.xlsx", "type":"table"},
{"fileName":"Datas/__beans__.xlsx", "type":"bean"},
{"fileName":"Datas/__enums__.xlsx", "type":"enum"}
],
"dataDir": "Datas",
"targets":
[
{"name":"server", "manager":"Tables", "groups":["s"], "topModule":"GameConfig"},
{"name":"client", "manager":"Tables", "groups":["c"], "topModule":"GameConfig"},
{"name":"all", "manager":"Tables", "groups":["c,s,e"], "topModule":"GameConfig"}
]
}

View File

@@ -1,21 +0,0 @@
cd /d %~dp0
set WORKSPACE=..
set GEN_CLIENT=%WORKSPACE%\Tools\Luban.ClientServer\Luban.ClientServer.exe
set CONF_ROOT=%WORKSPACE%\Configs
set DATA_OUTPUT=%ROOT_PATH%..\GenerateDatas
set CUSTOM_TEMP=%WORKSPACE%\Configs\CustomTemplate\CustomTemplate_Client
xcopy %CUSTOM_TEMP%\ConfigSystem.cs %WORKSPACE%\UnityProject\Assets\GameScripts\HotFix\GameProto\ConfigSystem.cs /s /e /i /y
%GEN_CLIENT% -j cfg --^
-d %CONF_ROOT%\Defines\__root__.xml ^
--input_data_dir %CONF_ROOT%\Excels^
--output_code_dir %WORKSPACE%/UnityProject/Assets/GameScripts/HotFix/GameProto/GameConfig ^
--output_data_dir %WORKSPACE%/UnityProject/Assets/AssetRaw/Configs/bytes/ ^
--gen_types code_cs_unity_bin,data_bin ^
-s client
echo ======== 生成配置文件结束 ========
pause

View File

@@ -1,40 +0,0 @@
cd /d %~dp0
set WORKSPACE=..
set GEN_CLIENT=%WORKSPACE%\Tools\Luban.ClientServer\Luban.ClientServer.exe
set CONF_ROOT=%WORKSPACE%\Configs
set DATA_OUTPUT=%ROOT_PATH%..\GenerateDatas
set CUSTOM_TEMP=%WORKSPACE%\Configs\CustomTemplate\CustomTemplate_Client_LazyLoad
xcopy %CUSTOM_TEMP%\ConfigSystem.cs %WORKSPACE%\UnityProject\Assets\GameScripts\HotFix\GameProto\ConfigSystem.cs /s /e /i /y
%GEN_CLIENT% --template_search_path %CONF_ROOT%\CustomTemplate\CustomTemplate_Client_LazyLoad -j cfg --^
-d %CONF_ROOT%\Defines\__root__.xml ^
--input_data_dir %CONF_ROOT%\Excels^
--output_code_dir %WORKSPACE%/UnityProject/Assets/GameScripts/HotFix/GameProto/GameConfig ^
--output_data_dir %WORKSPACE%/UnityProject/Assets/AssetRaw/Configs/bytes/ ^
--gen_types data_bin ^
-s client
%GEN_CLIENT% --template_search_path %CONF_ROOT%\CustomTemplate\CustomTemplate_Client_LazyLoad -j cfg --^
-d %CONF_ROOT%\Defines\__root__.xml ^
--input_data_dir %CONF_ROOT%\Excels^
--output_code_dir %WORKSPACE%/UnityProject/Assets/GameScripts/HotFix/GameProto/GameConfig ^
--output_data_dir ..\GenerateDatas\bidx ^
--gen_types code_cs_unity_bin,data_bidx ^
-s client
echo ======== 生成配置文件结束 ========
set WORKSPACE=..
set "prefix=Idx_"
for %%a in (%DATA_OUTPUT%\bidx\*) do (
ren "%%a" "Idx_%%~nxa"
)
echo ======== 所有文件已添加前缀 ========
xcopy %DATA_OUTPUT%\bidx\ %WORKSPACE%\UnityProject\Assets\AssetRaw\Configs\bidx\ /s /e /i /y
pause

View File

@@ -1,21 +0,0 @@
cd /d %~dp0
set WORKSPACE=..
set GEN_CLIENT=%WORKSPACE%\Tools\Luban.ClientServer\Luban.ClientServer.exe
set CONF_ROOT=%WORKSPACE%\Configs
set DATA_OUTPUT=%ROOT_PATH%..\GenerateDatas
set CUSTOM_TEMP=%WORKSPACE%\Configs\CustomTemplate\CustomTemplate_Client_UniTask
xcopy %CUSTOM_TEMP%\ConfigSystem.cs %WORKSPACE%\UnityProject\Assets\GameScripts\HotFix\GameProto\ConfigSystem.cs /s /e /i /y
%GEN_CLIENT% --template_search_path %CONF_ROOT%\CustomTemplate\CustomTemplate_Client_UniTask -j cfg --^
-d %CONF_ROOT%\Defines\__root__.xml ^
--input_data_dir %CONF_ROOT%\Excels^
--output_code_dir %WORKSPACE%/UnityProject/Assets/GameScripts/HotFix/GameProto/GameConfig ^
--output_data_dir %WORKSPACE%/UnityProject/Assets/AssetRaw/Configs/bytes/ ^
--gen_types code_cs_unity_bin,data_bin ^
-s client
echo ======== 生成配置文件结束 ========
pause

View File

@@ -1,18 +0,0 @@
cd /d %~dp0
set WORKSPACE=..
set GEN_CLIENT=%WORKSPACE%\Tools\Luban.ClientServer\Luban.ClientServer.exe
set CONF_ROOT=%WORKSPACE%\Configs
set DATA_OUTPUT=%ROOT_PATH%..\GenerateDatas
%GEN_CLIENT% --template_search_path %CONF_ROOT%\CustomTemplate\CustomTemplate_Server_Task -j cfg --^
-d %CONF_ROOT%\Defines\__root__.xml ^
--input_data_dir %CONF_ROOT%\Excels^
--output_code_dir %WORKSPACE%/DotNet/Logic/src/Config/GameConfig ^
--output_data_dir ..\DotNet\Config\GameConfig ^
--gen_types code_cs_bin,data_bin ^
-s server
echo ======== 生成配置文件结束 ========
pause

View File

@@ -23,19 +23,18 @@
<a style="text-decoration:none">
<img src="https://img.shields.io/github/languages/top/ALEXTANGXIAO/TEngine" alt="topLanguage" />
</a>
<a href="https://deepwiki.com/Alex-Rachel/TEngine" style="text-decoration:none">
<img src="https://deepwiki.com/badge.svg" alt="DeepWiki" />
</a>
<br>
<br>
</p>
# <strong>TEngine
#### TEngine是一个简单(新手友好开箱即用)且强大的Unity框架全平台解决方案,对于需要一套上手快、文档清晰、高性能且可拓展性极强的商业级解决方案的开发者或者团队来说是一个很好的选择。
## <a href="http://1.12.241.46:5000/"><strong>文档快速入门 »</strong></a>
## 文档快速预览 - 5分钟
* [全平台跑通示意](Books/99-各平台运行RunAble.md): 全平台跑通示意。
* [01_介绍](Books/0-介绍.md): 简单介绍。
@@ -46,49 +45,49 @@
* [06_对象池模块](Books/3-4-%E5%AF%B9%E8%B1%A1%E6%B1%A0%E6%A8%A1%E5%9D%97.md): 展示对象池模块概览。
* [07_配置表模块](Books/3-6-%E9%85%8D%E7%BD%AE%E8%A1%A8%E6%A8%A1%E5%9D%97.md): 展示配置表模块概览。
* [08_流程模块](Books/3-7-%E6%B5%81%E7%A8%8B%E6%A8%A1%E5%9D%97.md): 展示商业化流程模块。
* [09_UI模块](Books/3-5-UI模块.md): 展示商业化UI模块。
## <strong>为什么要使用TEngine
0. 开箱即用5分钟即可上手整套开发流程代码整洁思路清晰功能强大。高内聚低耦合。您可以很轻易的把您不需要的模块进行移除替换。
1. 严格按照商业要求使用次世代的HybridClr进行热更新、最佳的Luban配置表(TEngine支持懒加载、异步加载、同步加载配置。)、百万DAU游戏验证过的YooAsset资源框架框架管理资源引用与释放。全平台热更新流程已跑通。
2. 严格按照商业化流程执行的热更新、商业化的UI开发流程、以及资源管理等等设计并实现了YooAsset资源自动释放、支持LRU、ARC严格管理资源内存。
3. C#双端解决方案服务器使用Fantasy是一套源于ETServer但极为简洁性能更强更好上手的一套商业级服务器框架
4. 支持全平台已有项目使用TEngine上架Steam、Wechat-minigame、AppStore。
3. 支持全平台已有项目使用TEngine上架Steam、Wechat-minigame、AppStore
## <strong>资源重要拓展概念
* AssetReference (资源引用标识) 通用加载资源的时候绑定一个引用标识使你无需关心手动Dispose资源句柄。
## <strong>最新的Demo飞机大战位于demo分支
* AssetGroup资源组数据进行资源分组绑定管理内存中的生命周期资源生命周期托管给资源组的根节点进行Dispose。
## <strong>服务器相关
TEngine本身为纯净的客户端。不强绑定任何服务器。但是个人开发以及中小型公司开发双端则推荐C#服务器
* LruCacheTable (Least Recently Used Cache缓存表)
* ArcCacheTable (Adaptive Replacement Cache缓存表)
## <strong>为什么服务器使用C#
Net Core现在已经更新到了8.0的版本在性能和设计上其实是远超JAVA和GO。在JAVAER还在为JVM更新和添加更多功能时其实他们已经被国内大环境所包围了看不到.Net Core的性能之强组件化的结构。国内大环境是JAVA和GO的天下这个不可否认但是国外C#也确实很多。其实.Net Core最大的问题是大多数自己人都不知道他的优点(AOT、JIT混合编译、热重载等等)甚至很多守旧派抵制core。GO喜欢吹性能但其实目前来看除了协程的轻量级大多数性能测试其实不如JAVA和.Net。简单可以说出了C++的性能以外Net Core其实都打得过。
<strong>当然作为商业级解决方案服务器的耦合度也极低,如果不喜欢您也可以很轻松直接移除替换成你的服务器。</strong>
需要服务器可以合并<a href="https://github.com/ALEXTANGXIAO/GameNetty"><strong>GameNetty</strong></a>过来或者分支Fantasy为接好的带有Fantasy服务器的双端分支。
## <strong>项目结构概览
```
Assets
├── AssetArt // 美术资源目录
│ └── Atlas // 自动生成图集目录
├── AssetRaw // 热更资源目录
├── Atlas // 自动生成图集目录
│ ├── UIRaw // UI图片目录
│ │ ├── Atlas // 需要自动生成图集的UI素材目录
│ │ └── Raw // 不需要自动生成图集的UI素材目录
├── Editor // 编辑器脚本目录
├── HybridCLRData // hybridclr相关目录
├── Scenes // 主场景目录
├── TEngine // 框架核心目录
└── GameScripts // 程序集目录
├── Editor // 编辑器程序集
├── Main // 主程序程序集(启动器与流程)
├── Procedure // 启动器与流程
└── HotFix // 游戏热更程序集目录 [Folder]
├── GameBase // 游戏基础框架程序集 [Dll]
├── GameProto // 游戏配置协议程序集 [Dll]
├── BattleCore // 游戏核心战斗程序集 [Dll]
├── GameProto // 游戏配置协议程序集 [Dll]
└── GameLogic // 游戏业务逻辑程序集 [Dll]
── GameApp.cs // 热更主入口
└── GameApp_RegisterSystem.cs // 热更主入口注册系统
```
── GameApp.cs // 热更主入口
- 必要:项目使用了以下第三方插件,请自行购买导入:
- /Unity/Assets/Plugins/Sirenix
TEngine
├── Editor // TEngine编辑器核心代码
└── Runtime // TEngine运行时核心代码
```
---
## <strong>优质开源项目推荐
@@ -99,7 +98,13 @@ Assets
#### <a href="https://github.com/focus-creative-games/hybridclr"><strong>HybridCLR</strong></a> - 特性完整、零成本、高性能、低内存的近乎完美的Unity全平台原生c#热更方案
#### <a href="https://github.com/qq362946/Fantasy"><strong>Fantasy</strong></a> - Fantasy是一套源于ETServer但极为简洁性能更强,更好上手的一套商业级服务器框架。
#### <a href="https://github.com/qq362946/Fantasy"><strong>Fantasy</strong></a> - Fantasy是一套源于ETServer但极为简洁更好上手的一套商业级服务器框架。
## <strong>交流群
### <a href="http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=MzOcQIzGVLQ5AC5LHaqqA3h_F6lZ_DX4&authKey=LctqAWGHkJ7voQvuj1oaSe5tsGrc1XmQG3U4QniieGUlxY3lC7FtDIpEvPOX0vT8&noverify=0&group_code=862987645">群 号862987645 </strong></a>
#### <a href="https://github.com/ALEXTANGXIAO/GameNetty"><strong>GameNetty</strong></a> - GameNetty是一套源于ETServer首次拆分最新的ET8.1的前后端解决方案客户端最精简大约750k完美做成包的形式几乎零成本 无侵入的嵌入进你的框架。
#### <a href="https://github.com/Herta-Space-Station/FixedPoint"><strong>FixedPoint</strong></a> - 性能极限的定点数学库FixedPoint。
## <strong>Buy me a 奶茶.
[您的赞助会让我们做得更快更好如果觉得TEngine对您有帮助不妨请我可爱的女儿买杯奶茶吧~](Books/Donate.md)

3
Tools/FileServer/instal.sh Executable file
View File

@@ -0,0 +1,3 @@
#!/bin/bash
npm install yumu-static-server -g

3
Tools/FileServer/start.sh Executable file
View File

@@ -0,0 +1,3 @@
#!/bin/bash
server -p 8081 -cors

View File

@@ -0,0 +1,13 @@
# Default ignored files
/shelf/
/workspace.xml
# Rider ignored files
/modules.xml
/projectSettingsUpdater.xml
/.idea.SourceGenerator.iml
/contentModel.xml
# Editor-based HTTP Client requests
/httpRequests/
# Datasource local storage ignored files
/dataSources/
/dataSources.local.xml

View File

@@ -0,0 +1 @@
SourceGenerator

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="Encoding" addBOMForNewFiles="with BOM under Windows, with no BOM otherwise" />
</project>

View File

@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="UserContentModel">
<attachedFolders />
<explicitIncludes />
<explicitExcludes />
</component>
</project>

View File

@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="$PROJECT_DIR$/../.." vcs="Git" />
</component>
</project>

View File

@@ -0,0 +1,568 @@
using System;
using System.Collections.Generic;
using System.Linq;
using Microsoft.CodeAnalysis;
using Microsoft.CodeAnalysis.CSharp;
using Microsoft.CodeAnalysis.CSharp.Syntax;
using Microsoft.CodeAnalysis.Diagnostics;
using Microsoft.CodeAnalysis.FlowAnalysis;
using Exception = System.Exception;
namespace Analyzer
{
public static class AnalyzerHelper
{
/// <summary>
/// 获取语法树节点的子节点中第一个指定类型节点
/// </summary>
/// <param name="syntaxNode">语法树节点</param>
/// <typeparam name="T">指定语法节点类型</typeparam>
/// <returns>第一个指定类型节点</returns>
public static T? GetFirstChild<T>(this SyntaxNode syntaxNode) where T : SyntaxNode
{
foreach (SyntaxNode? childNode in syntaxNode.ChildNodes())
{
if (childNode.GetType() == typeof(T))
{
return childNode as T;
}
}
return null;
}
public static SyntaxNode? GetFirstChild(this SyntaxNode syntaxNode)
{
var childNodes = syntaxNode.ChildNodes();
if (childNodes.Count() > 0)
{
return childNodes.First();
}
return null;
}
/// <summary>
/// 获取语法树节点的子节点中最后一个指定类型节点
/// </summary>
/// <param name="syntaxNode">语法树节点</param>
/// <typeparam name="T">指定语法节点类型</typeparam>
/// <returns>最后一个指定类型节点</returns>
public static T? GetLastChild<T>(this SyntaxNode syntaxNode) where T : SyntaxNode
{
foreach (SyntaxNode? childNode in syntaxNode.ChildNodes().Reverse())
{
if (childNode.GetType() == typeof(T))
{
return childNode as T;
}
}
return null;
}
/// <summary>
/// 获取语法节点所属的ClassDeclarationSyntax
/// </summary>
public static ClassDeclarationSyntax? GetParentClassDeclaration(this SyntaxNode syntaxNode)
{
SyntaxNode? parentNode = syntaxNode.Parent;
while (parentNode != null)
{
if (parentNode is ClassDeclarationSyntax classDeclarationSyntax)
{
return classDeclarationSyntax;
}
parentNode = parentNode.Parent;
}
return null;
}
/// <summary>
/// INamedTypeSymbol 是否有指定的Attribute
/// </summary>
public static bool HasAttribute(this ITypeSymbol typeSymbol, string AttributeName)
{
foreach (AttributeData? attributeData in typeSymbol.GetAttributes())
{
if (attributeData.AttributeClass?.ToString() == AttributeName)
{
return true;
}
}
return false;
}
public static bool HasAttributeInTypeAndBaseTyes(this ITypeSymbol typeSymbol, string AttributeName)
{
if (typeSymbol.HasAttribute(AttributeName))
{
return true;
}
foreach (var baseType in typeSymbol.BaseTypes())
{
if (baseType.HasAttribute(AttributeName))
{
return true;
}
}
return false;
}
public static IEnumerable<ITypeSymbol> BaseTypes(this ITypeSymbol typeSymbol)
{
ITypeSymbol? baseType = typeSymbol.BaseType;
while (baseType != null)
{
yield return baseType;
baseType = baseType.BaseType;
}
}
/// <summary>
/// INamedTypeSymbol 是否有指定的基类Attribute
/// </summary>
public static bool HasBaseAttribute(this INamedTypeSymbol namedTypeSymbol, string AttributeName)
{
foreach (AttributeData? attributeData in namedTypeSymbol.GetAttributes())
{
INamedTypeSymbol? attributeType = attributeData.AttributeClass?.BaseType;
while (attributeType != null)
{
if (attributeType.ToString() == AttributeName)
{
return true;
}
attributeType = attributeType.BaseType;
}
}
return false;
}
/// <summary>
/// INamedTypeSymbol 获取指定类型的第一个Attribute
/// </summary>
public static AttributeData? GetFirstAttribute(this INamedTypeSymbol namedTypeSymbol, string AttributeName)
{
foreach (AttributeData? attributeData in namedTypeSymbol.GetAttributes())
{
if (attributeData.AttributeClass?.ToString() == AttributeName)
{
return attributeData;
}
}
return null;
}
/// <summary>
/// INamedTypeSymbol 是否含有指定接口
/// </summary>
public static bool HasInterface(this INamedTypeSymbol namedTypeSymbol, string InterfaceName)
{
foreach (INamedTypeSymbol? iInterface in namedTypeSymbol.AllInterfaces)
{
if (iInterface.IsInterface(InterfaceName))
{
return true;
}
}
return false;
}
/// <summary>
/// 某个接口symbol 是否是指定的接口
/// </summary>
public static bool IsInterface(this INamedTypeSymbol namedTypeSymbol, string InterfaceName)
{
return $"{namedTypeSymbol.GetNameSpace()}.{namedTypeSymbol.Name}" == InterfaceName;
}
/// <summary>
/// 判断指定的程序集是否需要分析
/// </summary>
public static bool IsAssemblyNeedAnalyze(string? assemblyName, params string[] analyzeAssemblyNames)
{
if (assemblyName == null)
{
return false;
}
foreach (string analyzeAssemblyName in analyzeAssemblyNames)
{
if (assemblyName == analyzeAssemblyName)
{
return true;
}
}
return false;
}
/// <summary>
/// 获取 成员访问语法节点的父级类型
/// </summary>
public static ITypeSymbol? GetMemberAccessSyntaxParentType(this MemberAccessExpressionSyntax memberAccessExpressionSyntax,
SemanticModel semanticModel)
{
SyntaxNode? firstChildSyntaxNode = memberAccessExpressionSyntax.GetFirstChild();
if (firstChildSyntaxNode == null)
{
return null;
}
ISymbol? firstChildSymbol = semanticModel.GetSymbolInfo(firstChildSyntaxNode).Symbol;
if (firstChildSymbol == null)
{
return null;
}
if (firstChildSymbol is ILocalSymbol localSymbol)
{
return localSymbol.Type;
}
if (firstChildSymbol is IParameterSymbol parameterSymbol)
{
return parameterSymbol.Type;
}
if (firstChildSymbol is IPropertySymbol propertySymbol)
{
return propertySymbol.Type;
}
if (firstChildSymbol is IMethodSymbol methodSymbol)
{
return methodSymbol.ReturnType;
}
if (firstChildSymbol is IFieldSymbol fieldSymbol)
{
return fieldSymbol.Type;
}
if (firstChildSymbol is IEventSymbol eventSymbol)
{
return eventSymbol.Type;
}
return null;
}
/// <summary>
/// 获取最近的指定类型祖先节点
/// </summary>
public static T? GetNeareastAncestor<T>(this SyntaxNode syntaxNode) where T : SyntaxNode
{
foreach (var ancestorNode in syntaxNode.Ancestors())
{
if (ancestorNode is T Tancestor)
{
return Tancestor;
}
}
return null;
}
/// <summary>
/// 判断函数是否是否含有指定类型的参数
/// </summary>
public static bool HasParameterType(this IMethodSymbol methodSymbol, string parameterType, out IParameterSymbol? cencelTokenSymbol)
{
foreach (var parameterSymbol in methodSymbol.Parameters)
{
if (parameterSymbol.Type.ToString() == parameterType)
{
cencelTokenSymbol = parameterSymbol;
return true;
}
}
cencelTokenSymbol = null;
return false;
}
/// <summary>
/// 获取所有指定类型的子节点
/// </summary>
public static IEnumerable<T> DescendantNodes<T>(this SyntaxNode syntaxNode) where T : SyntaxNode
{
foreach (var descendantNode in syntaxNode.DescendantNodes())
{
if (descendantNode is T node)
{
yield return node;
}
}
}
/// <summary>
/// 获取与该语法节点同层级的上一个节点
/// </summary>
public static SyntaxNode? PreviousNode(this SyntaxNode syntaxNode)
{
if (syntaxNode.Parent == null)
{
return null;
}
int index = 0;
foreach (var childNode in syntaxNode.Parent.ChildNodes())
{
if (childNode == syntaxNode)
{
break;
}
index++;
}
if (index == 0)
{
return null;
}
return syntaxNode.Parent.ChildNodes().ElementAt(index - 1);
}
/// <summary>
/// 获取与该语法节点同层级的下一个节点
/// </summary>
public static SyntaxNode? NextNode(this SyntaxNode syntaxNode)
{
if (syntaxNode.Parent == null)
{
return null;
}
int index = 0;
foreach (var childNode in syntaxNode.Parent.ChildNodes())
{
if (childNode == syntaxNode)
{
break;
}
index++;
}
if (index == syntaxNode.Parent.ChildNodes().Count() - 1)
{
return null;
}
return syntaxNode.Parent.ChildNodes().ElementAt(index + 1);
}
/// <summary>
/// 获取await表达式所在的控制流block
/// </summary>
public static BasicBlock? GetAwaitStatementControlFlowBlock(StatementSyntax statementSyntax, AwaitExpressionSyntax awaitExpressionSyntax, SemanticModel semanticModel)
{
// 跳过 return 表达式
if (statementSyntax.IsKind(SyntaxKind.ReturnStatement))
{
return null;
}
var methodSyntax = statementSyntax.GetNeareastAncestor<MethodDeclarationSyntax>();
if (methodSyntax == null)
{
return null;
}
// 构建表达式所在函数的控制流图
var controlFlowGraph = ControlFlowGraph.Create(methodSyntax, semanticModel);
if (controlFlowGraph == null)
{
return null;
}
if (statementSyntax is LocalDeclarationStatementSyntax)
{
return null;
}
BasicBlock? block = controlFlowGraph.Blocks.FirstOrDefault(x => x.Operations.Any(y => y.Syntax.Contains(statementSyntax)));
return block;
}
/// <summary>
/// 判断类是否为partial类
/// </summary>
public static bool IsPartial(this ClassDeclarationSyntax classDeclaration)
{
foreach (var modifier in classDeclaration.Modifiers)
{
if (modifier.IsKind(SyntaxKind.PartialKeyword))
{
return true;
}
}
return false;
}
public static string? GetNameSpace(this INamedTypeSymbol namedTypeSymbol)
{
INamespaceSymbol? namespaceSymbol = namedTypeSymbol.ContainingNamespace;
string? namespaceName = namespaceSymbol?.Name;
while (namespaceSymbol?.ContainingNamespace != null)
{
namespaceSymbol = namespaceSymbol.ContainingNamespace;
if (string.IsNullOrEmpty(namespaceSymbol.Name))
{
break;
}
namespaceName = $"{namespaceSymbol.Name}.{namespaceName}";
}
if (string.IsNullOrEmpty(namespaceName))
{
return null;
}
return namespaceName;
}
/// <summary>
/// 根据语义模型的文件路径 判断是否需要分析
/// </summary>
public static bool IsSemanticModelNeedAnalyze(SemanticModel semanticModel, params string[] filePaths)
{
foreach (var filePath in filePaths)
{
if (semanticModel.SyntaxTree.FilePath.Contains(filePath))
{
return true;
}
}
return false;
}
/// <summary>
/// 类型symbol是否有指定名字 指定参数的方法
/// </summary>
public static bool HasMethodWithParams(this INamedTypeSymbol namedTypeSymbol, string methodName, params ITypeSymbol[] typeSymbols)
{
foreach (var member in namedTypeSymbol.GetMembers())
{
if (member is not IMethodSymbol methodSymbol)
{
continue;
}
if (methodSymbol.Name != methodName)
{
continue;
}
if (typeSymbols.Length != methodSymbol.Parameters.Length)
{
continue;
}
if (typeSymbols.Length == 0)
{
return true;
}
bool isEqual = true;
for (int i = 0; i < typeSymbols.Length; i++)
{
if (typeSymbols[i].ToString() != methodSymbol.Parameters[i].Type.ToString())
{
isEqual = false;
break;
}
}
if (isEqual)
{
return true;
}
}
return false;
}
/// <summary>
/// 类型symbol是否有指定名字 指定参数的方法
/// </summary>
public static bool HasMethodWithParams(this INamedTypeSymbol namedTypeSymbol, string methodName, params string[] typeSymbols)
{
foreach (var member in namedTypeSymbol.GetMembers())
{
if (member is not IMethodSymbol methodSymbol)
{
continue;
}
if (methodSymbol.Name != methodName)
{
continue;
}
if (typeSymbols.Length != methodSymbol.Parameters.Length)
{
continue;
}
if (typeSymbols.Length == 0)
{
return true;
}
bool isEqual = true;
for (int i = 0; i < typeSymbols.Length; i++)
{
if (typeSymbols[i] != methodSymbol.Parameters[i].Type.ToString())
{
isEqual = false;
break;
}
}
if (isEqual)
{
return true;
}
}
return false;
}
/// <summary>
/// 方法symbol 是否有指定的attribute
/// </summary>
public static bool HasAttribute(this IMethodSymbol methodSymbol, string AttributeName)
{
foreach (AttributeData? attributeData in methodSymbol.GetAttributes())
{
if (attributeData?.AttributeClass?.ToString() == AttributeName)
{
return true;
}
}
return false;
}
}
}

View File

@@ -0,0 +1,41 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.5.002.0
MinimumVisualStudioVersion = 10.0.40219.1
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SourceGenerator", "SourceGenerator\SourceGenerator.csproj", "{26B3F75F-AB7F-48F8-B234-F5A26E8CA319}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{57F17CC8-F26D-496E-B8E9-2601F9FF3CE5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{57F17CC8-F26D-496E-B8E9-2601F9FF3CE5}.Debug|Any CPU.Build.0 = Debug|Any CPU
{57F17CC8-F26D-496E-B8E9-2601F9FF3CE5}.Release|Any CPU.ActiveCfg = Release|Any CPU
{57F17CC8-F26D-496E-B8E9-2601F9FF3CE5}.Release|Any CPU.Build.0 = Release|Any CPU
{26B3F75F-AB7F-48F8-B234-F5A26E8CA319}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{26B3F75F-AB7F-48F8-B234-F5A26E8CA319}.Debug|Any CPU.Build.0 = Debug|Any CPU
{26B3F75F-AB7F-48F8-B234-F5A26E8CA319}.Release|Any CPU.ActiveCfg = Release|Any CPU
{26B3F75F-AB7F-48F8-B234-F5A26E8CA319}.Release|Any CPU.Build.0 = Release|Any CPU
{F02E4A8C-07E7-4C7F-B30A-3D5BE1C7CB98}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{F02E4A8C-07E7-4C7F-B30A-3D5BE1C7CB98}.Debug|Any CPU.Build.0 = Debug|Any CPU
{F02E4A8C-07E7-4C7F-B30A-3D5BE1C7CB98}.Release|Any CPU.ActiveCfg = Release|Any CPU
{F02E4A8C-07E7-4C7F-B30A-3D5BE1C7CB98}.Release|Any CPU.Build.0 = Release|Any CPU
{23425ADC-1091-46A0-94BF-8EA6A7F5EFD7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{23425ADC-1091-46A0-94BF-8EA6A7F5EFD7}.Debug|Any CPU.Build.0 = Debug|Any CPU
{23425ADC-1091-46A0-94BF-8EA6A7F5EFD7}.Release|Any CPU.ActiveCfg = Release|Any CPU
{23425ADC-1091-46A0-94BF-8EA6A7F5EFD7}.Release|Any CPU.Build.0 = Release|Any CPU
{CA734AB9-F825-4DDA-BCB1-AD5FC464CAB0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{CA734AB9-F825-4DDA-BCB1-AD5FC464CAB0}.Debug|Any CPU.Build.0 = Debug|Any CPU
{CA734AB9-F825-4DDA-BCB1-AD5FC464CAB0}.Release|Any CPU.ActiveCfg = Release|Any CPU
{CA734AB9-F825-4DDA-BCB1-AD5FC464CAB0}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {FCBB04E4-2793-4CF8-9278-E932D3B254AC}
EndGlobalSection
EndGlobal

View File

@@ -0,0 +1,7 @@
public class Definition
{
public const string FrameworkNameSpace = "TEngine";
public const string NameSpace = "GameLogic";
public const string EventInterface = "EventInterface";
public const string StringToHash = "RuntimeId.ToRuntimeId";
}

View File

@@ -0,0 +1,192 @@
using Microsoft.CodeAnalysis;
using Microsoft.CodeAnalysis.CSharp;
using Microsoft.CodeAnalysis.CSharp.Syntax;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Analyzer;
[Generator]
public class EventInterfaceGenerator : ISourceGenerator
{
public void Initialize(GeneratorInitializationContext context)
{
// 可以在这里进行初始化
}
public void Execute(GeneratorExecutionContext context)
{
// 获取当前语法树
var syntaxTrees = context.Compilation.SyntaxTrees;
List<string> classNameList = new List<string>();
foreach (var tree in syntaxTrees)
{
var root = tree.GetRoot();
var interfaces = root.DescendantNodes()
.OfType<InterfaceDeclarationSyntax>()
.Where(i => i.AttributeLists.Count > 0 &&
i.AttributeLists
.Any(a => a.Attributes
.Any(attr => attr.Name.ToString() == $"{Definition.EventInterface}")));
foreach (var interfaceNode in interfaces)
{
var interfaceName = interfaceNode.Identifier.ToString();
var fullName = interfaceNode.SyntaxTree.GetRoot()
.DescendantNodes()
.OfType<NamespaceDeclarationSyntax>()
.Select(ns => ns.Name.ToString())
.Concat(new[] { interfaceName })
.Aggregate((a, b) => a + "." + b);
var eventClassName = $"{interfaceName}_Event";
var eventClassCode = GenerateEventClass(interfaceName, eventClassName, interfaceNode);
context.AddSource($"{eventClassName}.g.cs", eventClassCode);
// 生成实现类
var implementationClassCode = GenerateImplementationClass(fullName, interfaceName, interfaceNode,context);
context.AddSource($"{interfaceName}_Gen.g.cs", implementationClassCode);
classNameList.Add($"{interfaceName}_Gen");
}
}
string uniqueFileName = $"GameEventHelper.g.cs";
context.AddSource(uniqueFileName, GenerateGameEventHelper(classNameList));
}
private string GenerateGameEventHelper(List<string> classNameList)
{
var sb = new StringBuilder();
sb.AppendLine($"//------------------------------------------------------------------------------");
sb.AppendLine($"// <auto-generated>");
sb.AppendLine($"// This code was generated by autoBindTool.");
sb.AppendLine($"// Changes to this file may cause incorrect behavior and will be lost if");
sb.AppendLine($"// the code is regenerated.");
sb.AppendLine($"// </auto-generated>");
sb.AppendLine($"//------------------------------------------------------------------------------");
sb.AppendLine();
sb.AppendLine($"using UnityEngine;");
sb.AppendLine($"using UnityEngine.UI;");
sb.AppendLine($"using {Definition.FrameworkNameSpace};");
sb.AppendLine();
sb.AppendLine($"namespace {Definition.NameSpace}");
sb.AppendLine($"{{");
sb.AppendLine($" public static class GameEventHelper");
sb.AppendLine(" {");
sb.AppendLine($" public static void Init()");
sb.AppendLine(" {");
foreach (var className in classNameList)
{
sb.AppendLine($" var m_{className} = new {className}(GameEvent.EventMgr.GetDispatcher());");
}
sb.AppendLine(" }");
sb.AppendLine(" }");
sb.AppendLine("}");
return sb.ToString();
}
private string GenerateEventClass(string interfaceName, string className, InterfaceDeclarationSyntax interfaceNode)
{
var methods = interfaceNode.Members.OfType<MethodDeclarationSyntax>();
var sb = new StringBuilder();
sb.AppendLine($"//------------------------------------------------------------------------------");
sb.AppendLine($"// <auto-generated>");
sb.AppendLine($"// This code was generated by autoBindTool.");
sb.AppendLine($"// Changes to this file may cause incorrect behavior and will be lost if");
sb.AppendLine($"// the code is regenerated.");
sb.AppendLine($"// </auto-generated>");
sb.AppendLine($"//------------------------------------------------------------------------------");
sb.AppendLine();
sb.AppendLine($"using UnityEngine;");
sb.AppendLine($"using UnityEngine.UI;");
sb.AppendLine($"using {Definition.FrameworkNameSpace};");
sb.AppendLine();
sb.AppendLine($"namespace {Definition.NameSpace}");
sb.AppendLine("{");
sb.AppendLine($" public partial class {className}");
sb.AppendLine(" {");
foreach (var method in methods)
{
var methodName = method.Identifier.ToString();
var parameters = string.Join(", ", method.ParameterList.Parameters.Select(p => $"{p.Type} {p.Identifier}"));
sb.AppendLine($" public static readonly int {methodName} = {Definition.StringToHash}(\"{className}.{methodName}\");");
}
sb.AppendLine(" }");
sb.AppendLine("}");
return sb.ToString();
}
private string GenerateImplementationClass(string interfaceFullName, string interfaceName, InterfaceDeclarationSyntax interfaceNode,GeneratorExecutionContext context)
{
var semanticModel = context.Compilation.GetSemanticModel(interfaceNode.SyntaxTree);
var sb = new StringBuilder();
sb.AppendLine($"//------------------------------------------------------------------------------");
sb.AppendLine($"// <auto-generated>");
sb.AppendLine($"// This code was generated by autoBindTool.");
sb.AppendLine($"// Changes to this file may cause incorrect behavior and will be lost if");
sb.AppendLine($"// the code is regenerated.");
sb.AppendLine($"// </auto-generated>");
sb.AppendLine($"//------------------------------------------------------------------------------");
sb.AppendLine();
sb.AppendLine($"using UnityEngine;");
sb.AppendLine($"using UnityEngine.UI;");
sb.AppendLine($"using {Definition.FrameworkNameSpace};");
sb.AppendLine();
sb.AppendLine($"namespace {Definition.NameSpace}");
sb.AppendLine($"{{");
sb.AppendLine($" public partial class {interfaceName}_Gen : {interfaceName}");
sb.AppendLine(" {");
sb.AppendLine(" private EventDispatcher _dispatcher;");
sb.AppendLine($" public {interfaceName}_Gen(EventDispatcher dispatcher)");
sb.AppendLine(" {");
sb.AppendLine(" _dispatcher = dispatcher;");
sb.AppendLine($" GameEvent.EventMgr.RegWrapInterface(\"{interfaceFullName}\", this);");
sb.AppendLine(" }");
foreach (var method in interfaceNode.Members.OfType<MethodDeclarationSyntax>())
{
var methodName = method.Identifier.ToString();
var parameters = GenerateParameters(method, semanticModel);
sb.AppendLine($" public void {methodName}({parameters})");
sb.AppendLine(" {");
if (method.ParameterList.Parameters.Count > 0)
{
var paramNames = string.Join(", ", method.ParameterList.Parameters.Select(p => p.Identifier.ToString()));
sb.AppendLine($" _dispatcher.Send({interfaceName}_Event.{methodName}, {paramNames});");
}
else
{
sb.AppendLine($" _dispatcher.Send({interfaceName}_Event.{methodName});");
}
sb.AppendLine(" }");
}
sb.AppendLine(" }");
sb.AppendLine("}");
return sb.ToString();
}
private string GenerateParameters(MethodDeclarationSyntax method, SemanticModel semanticModel)
{
return string.Join(", ", method.ParameterList.Parameters.Select(p =>
{
var typeSymbol = semanticModel.GetTypeInfo(p.Type).Type;
return typeSymbol != null
? $"{typeSymbol.ToDisplayString()} {p.Identifier}"
: $"{p.Type} {p.Identifier}";
}));
}
}

View File

@@ -0,0 +1,34 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
<IncludeBuildOutput>false</IncludeBuildOutput>
<Nullable>enable</Nullable>
<LangVersion>12</LangVersion>
<IncludeBuildOutput>false</IncludeBuildOutput>
<DevelopmentDependency>true</DevelopmentDependency>
<IncludeSymbols>false</IncludeSymbols>
<NoWarn>1701;1702;RS2008</NoWarn>
<AppendTargetFrameworkToOutputPath>false</AppendTargetFrameworkToOutputPath>
<SatelliteResourceLanguages>en</SatelliteResourceLanguages>
</PropertyGroup>
<ItemGroup>
<Compile Include="../Analyzer/Extension/*.cs">
<Link>Extension\%(RecursiveDir)%(FileName)%(Extension)</Link>
</Compile>
</ItemGroup>
<ItemGroup>
<PackageReference Include="Microsoft.CodeAnalysis.CSharp" Version="3.9.0" PrivateAssets="all" />
<PackageReference Include="Microsoft.CodeAnalysis.Analyzers" Version="3.3.3">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
</ItemGroup>
<!-- <Target Name="PostBuild" AfterTargets="PostBuildEvent">-->
<!-- <Copy SourceFiles="$(TargetDir)/$(TargetName).dll" DestinationFolder="$(ProjectDir)/../../Unity/Assets/Plugins/" ContinueOnError="false" />-->
<!-- </Target>-->
</Project>

View File

@@ -0,0 +1,236 @@
{
"runtimeTarget": {
"name": ".NETStandard,Version=v2.0/",
"signature": ""
},
"compilationOptions": {},
"targets": {
".NETStandard,Version=v2.0": {},
".NETStandard,Version=v2.0/": {
"SourceGenerator/1.0.0": {
"dependencies": {
"Microsoft.CodeAnalysis.Analyzers": "3.3.3",
"Microsoft.CodeAnalysis.CSharp": "3.9.0",
"NETStandard.Library": "2.0.3"
},
"runtime": {
"SourceGenerator.dll": {}
}
},
"Microsoft.CodeAnalysis.Analyzers/3.3.3": {},
"Microsoft.CodeAnalysis.Common/3.9.0": {
"dependencies": {
"Microsoft.CodeAnalysis.Analyzers": "3.3.3",
"System.Collections.Immutable": "5.0.0",
"System.Memory": "4.5.4",
"System.Reflection.Metadata": "5.0.0",
"System.Runtime.CompilerServices.Unsafe": "5.0.0",
"System.Text.Encoding.CodePages": "4.5.1",
"System.Threading.Tasks.Extensions": "4.5.4"
},
"runtime": {
"lib/netstandard2.0/Microsoft.CodeAnalysis.dll": {
"assemblyVersion": "3.9.0.0",
"fileVersion": "3.900.21.12420"
}
}
},
"Microsoft.CodeAnalysis.CSharp/3.9.0": {
"dependencies": {
"Microsoft.CodeAnalysis.Common": "3.9.0"
},
"runtime": {
"lib/netstandard2.0/Microsoft.CodeAnalysis.CSharp.dll": {
"assemblyVersion": "3.9.0.0",
"fileVersion": "3.900.21.12420"
}
}
},
"Microsoft.NETCore.Platforms/1.1.0": {},
"NETStandard.Library/2.0.3": {
"dependencies": {
"Microsoft.NETCore.Platforms": "1.1.0"
}
},
"System.Buffers/4.5.1": {
"runtime": {
"lib/netstandard2.0/System.Buffers.dll": {
"assemblyVersion": "4.0.3.0",
"fileVersion": "4.6.28619.1"
}
}
},
"System.Collections.Immutable/5.0.0": {
"dependencies": {
"System.Memory": "4.5.4"
},
"runtime": {
"lib/netstandard2.0/System.Collections.Immutable.dll": {
"assemblyVersion": "5.0.0.0",
"fileVersion": "5.0.20.51904"
}
}
},
"System.Memory/4.5.4": {
"dependencies": {
"System.Buffers": "4.5.1",
"System.Numerics.Vectors": "4.4.0",
"System.Runtime.CompilerServices.Unsafe": "5.0.0"
},
"runtime": {
"lib/netstandard2.0/System.Memory.dll": {
"assemblyVersion": "4.0.1.1",
"fileVersion": "4.6.28619.1"
}
}
},
"System.Numerics.Vectors/4.4.0": {
"runtime": {
"lib/netstandard2.0/System.Numerics.Vectors.dll": {
"assemblyVersion": "4.1.3.0",
"fileVersion": "4.6.25519.3"
}
}
},
"System.Reflection.Metadata/5.0.0": {
"dependencies": {
"System.Collections.Immutable": "5.0.0"
},
"runtime": {
"lib/netstandard2.0/System.Reflection.Metadata.dll": {
"assemblyVersion": "5.0.0.0",
"fileVersion": "5.0.20.51904"
}
}
},
"System.Runtime.CompilerServices.Unsafe/5.0.0": {
"runtime": {
"lib/netstandard2.0/System.Runtime.CompilerServices.Unsafe.dll": {
"assemblyVersion": "5.0.0.0",
"fileVersion": "5.0.20.51904"
}
}
},
"System.Text.Encoding.CodePages/4.5.1": {
"dependencies": {
"System.Runtime.CompilerServices.Unsafe": "5.0.0"
},
"runtime": {
"lib/netstandard2.0/System.Text.Encoding.CodePages.dll": {
"assemblyVersion": "4.1.1.0",
"fileVersion": "4.6.27129.4"
}
}
},
"System.Threading.Tasks.Extensions/4.5.4": {
"dependencies": {
"System.Runtime.CompilerServices.Unsafe": "5.0.0"
},
"runtime": {
"lib/netstandard2.0/System.Threading.Tasks.Extensions.dll": {
"assemblyVersion": "4.2.0.1",
"fileVersion": "4.6.28619.1"
}
}
}
}
},
"libraries": {
"SourceGenerator/1.0.0": {
"type": "project",
"serviceable": false,
"sha512": ""
},
"Microsoft.CodeAnalysis.Analyzers/3.3.3": {
"type": "package",
"serviceable": true,
"sha512": "sha512-j/rOZtLMVJjrfLRlAMckJLPW/1rze9MT1yfWqSIbUPGRu1m1P0fuo9PmqapwsmePfGB5PJrudQLvmUOAMF0DqQ==",
"path": "microsoft.codeanalysis.analyzers/3.3.3",
"hashPath": "microsoft.codeanalysis.analyzers.3.3.3.nupkg.sha512"
},
"Microsoft.CodeAnalysis.Common/3.9.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-HiWjF7PNIEngmFg2Xk8cZ/83lRIRkk9v+5ibbY5B7VvjNGdClGAMuWtZER9F5rGRR41VbJLco9ah73jFTh4vPw==",
"path": "microsoft.codeanalysis.common/3.9.0",
"hashPath": "microsoft.codeanalysis.common.3.9.0.nupkg.sha512"
},
"Microsoft.CodeAnalysis.CSharp/3.9.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-NTsiK3fnoZGemy4dBHrILwg9rL+jDnOJ7aixFu4EOWM1r6MZMrNCIhT2tO4AmIMdfICLPwj910uZRRLpbMnqHg==",
"path": "microsoft.codeanalysis.csharp/3.9.0",
"hashPath": "microsoft.codeanalysis.csharp.3.9.0.nupkg.sha512"
},
"Microsoft.NETCore.Platforms/1.1.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-kz0PEW2lhqygehI/d6XsPCQzD7ff7gUJaVGPVETX611eadGsA3A877GdSlU0LRVMCTH/+P3o2iDTak+S08V2+A==",
"path": "microsoft.netcore.platforms/1.1.0",
"hashPath": "microsoft.netcore.platforms.1.1.0.nupkg.sha512"
},
"NETStandard.Library/2.0.3": {
"type": "package",
"serviceable": true,
"sha512": "sha512-st47PosZSHrjECdjeIzZQbzivYBJFv6P2nv4cj2ypdI204DO+vZ7l5raGMiX4eXMJ53RfOIg+/s4DHVZ54Nu2A==",
"path": "netstandard.library/2.0.3",
"hashPath": "netstandard.library.2.0.3.nupkg.sha512"
},
"System.Buffers/4.5.1": {
"type": "package",
"serviceable": true,
"sha512": "sha512-Rw7ijyl1qqRS0YQD/WycNst8hUUMgrMH4FCn1nNm27M4VxchZ1js3fVjQaANHO5f3sN4isvP4a+Met9Y4YomAg==",
"path": "system.buffers/4.5.1",
"hashPath": "system.buffers.4.5.1.nupkg.sha512"
},
"System.Collections.Immutable/5.0.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-FXkLXiK0sVVewcso0imKQoOxjoPAj42R8HtjjbSjVPAzwDfzoyoznWxgA3c38LDbN9SJux1xXoXYAhz98j7r2g==",
"path": "system.collections.immutable/5.0.0",
"hashPath": "system.collections.immutable.5.0.0.nupkg.sha512"
},
"System.Memory/4.5.4": {
"type": "package",
"serviceable": true,
"sha512": "sha512-1MbJTHS1lZ4bS4FmsJjnuGJOu88ZzTT2rLvrhW7Ygic+pC0NWA+3hgAen0HRdsocuQXCkUTdFn9yHJJhsijDXw==",
"path": "system.memory/4.5.4",
"hashPath": "system.memory.4.5.4.nupkg.sha512"
},
"System.Numerics.Vectors/4.4.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-UiLzLW+Lw6HLed1Hcg+8jSRttrbuXv7DANVj0DkL9g6EnnzbL75EB7EWsw5uRbhxd/4YdG8li5XizGWepmG3PQ==",
"path": "system.numerics.vectors/4.4.0",
"hashPath": "system.numerics.vectors.4.4.0.nupkg.sha512"
},
"System.Reflection.Metadata/5.0.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-5NecZgXktdGg34rh1OenY1rFNDCI8xSjFr+Z4OU4cU06AQHUdRnIIEeWENu3Wl4YowbzkymAIMvi3WyK9U53pQ==",
"path": "system.reflection.metadata/5.0.0",
"hashPath": "system.reflection.metadata.5.0.0.nupkg.sha512"
},
"System.Runtime.CompilerServices.Unsafe/5.0.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-ZD9TMpsmYJLrxbbmdvhwt9YEgG5WntEnZ/d1eH8JBX9LBp+Ju8BSBhUGbZMNVHHomWo2KVImJhTDl2hIgw/6MA==",
"path": "system.runtime.compilerservices.unsafe/5.0.0",
"hashPath": "system.runtime.compilerservices.unsafe.5.0.0.nupkg.sha512"
},
"System.Text.Encoding.CodePages/4.5.1": {
"type": "package",
"serviceable": true,
"sha512": "sha512-4J2JQXbftjPMppIHJ7IC+VXQ9XfEagN92vZZNoG12i+zReYlim5dMoXFC1Zzg7tsnKDM7JPo5bYfFK4Jheq44w==",
"path": "system.text.encoding.codepages/4.5.1",
"hashPath": "system.text.encoding.codepages.4.5.1.nupkg.sha512"
},
"System.Threading.Tasks.Extensions/4.5.4": {
"type": "package",
"serviceable": true,
"sha512": "sha512-zteT+G8xuGu6mS+mzDzYXbzS7rd3K6Fjb9RiZlYlJPam2/hU7JCBZBVEcywNuR+oZ1ncTvc/cq0faRr3P01OVg==",
"path": "system.threading.tasks.extensions/4.5.4",
"hashPath": "system.threading.tasks.extensions.4.5.4.nupkg.sha512"
}
}
}

View File

@@ -0,0 +1,4 @@
// <autogenerated />
using System;
using System.Reflection;
[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETStandard,Version=v2.0", FrameworkDisplayName = ".NET Standard 2.0")]

View File

@@ -0,0 +1,22 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
using System;
using System.Reflection;
[assembly: System.Reflection.AssemblyCompanyAttribute("SourceGenerator")]
[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")]
[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")]
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+b7d75c0f6f518a5f2ca0ed9304411302709f8dbe")]
[assembly: System.Reflection.AssemblyProductAttribute("SourceGenerator")]
[assembly: System.Reflection.AssemblyTitleAttribute("SourceGenerator")]
[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]
// 由 MSBuild WriteCodeFragment 类生成。

View File

@@ -0,0 +1 @@
1f4b8d9919850399efa15c732e9aadbc83f7ae6889745a83831d20da225de402

View File

@@ -0,0 +1,12 @@
is_global = true
build_property.TargetFramework = netstandard2.0
build_property.TargetPlatformMinVersion = 7.0
build_property.UsingMicrosoftNETSdkWeb =
build_property.ProjectTypeGuids =
build_property.InvariantGlobalization =
build_property.PlatformNeutralAssembly =
build_property._SupportedPlatformList = Linux,macOS,Windows
build_property.RootNamespace = SourceGenerator
build_property.ProjectDir = E:\WorkSpace\ZGame\Tools\GameEventSourceGenerator\SourceGenerator\
build_property.EnableComHosting =
build_property.EnableGeneratedComInterfaceComImportInterop =

View File

@@ -0,0 +1 @@
ff752c9a870df6aafb4669266bbcfd2f80f90bfd76a1bae882d02d67457c3ec4

View File

@@ -0,0 +1,32 @@
G:\github\TEngine\Tools\SourceGenerator\SourceGenerator\bin\Debug\SourceGenerator.deps.json
G:\github\TEngine\Tools\SourceGenerator\SourceGenerator\bin\Debug\SourceGenerator.dll
G:\github\TEngine\Tools\SourceGenerator\SourceGenerator\bin\Debug\SourceGenerator.pdb
G:\github\TEngine\Tools\SourceGenerator\SourceGenerator\obj\Debug\SourceGenerator.csproj.AssemblyReference.cache
G:\github\TEngine\Tools\SourceGenerator\SourceGenerator\obj\Debug\SourceGenerator.GeneratedMSBuildEditorConfig.editorconfig
G:\github\TEngine\Tools\SourceGenerator\SourceGenerator\obj\Debug\SourceGenerator.AssemblyInfoInputs.cache
G:\github\TEngine\Tools\SourceGenerator\SourceGenerator\obj\Debug\SourceGenerator.AssemblyInfo.cs
G:\github\TEngine\Tools\SourceGenerator\SourceGenerator\obj\Debug\SourceGenerator.csproj.CoreCompileInputs.cache
G:\github\TEngine\Tools\SourceGenerator\SourceGenerator\obj\Debug\SourceGenerator.sourcelink.json
G:\github\TEngine\Tools\SourceGenerator\SourceGenerator\obj\Debug\SourceGenerator.dll
G:\github\TEngine\Tools\SourceGenerator\SourceGenerator\obj\Debug\SourceGenerator.pdb
C:\Users\Admin\Downloads\GameEventSourceGenerator\SourceGenerator\obj\Debug\SourceGenerator.csproj.AssemblyReference.cache
C:\Users\Admin\Downloads\GameEventSourceGenerator\SourceGenerator\obj\Debug\SourceGenerator.GeneratedMSBuildEditorConfig.editorconfig
C:\Users\Admin\Downloads\GameEventSourceGenerator\SourceGenerator\obj\Debug\SourceGenerator.AssemblyInfoInputs.cache
C:\Users\Admin\Downloads\GameEventSourceGenerator\SourceGenerator\obj\Debug\SourceGenerator.AssemblyInfo.cs
C:\Users\Admin\Downloads\GameEventSourceGenerator\SourceGenerator\obj\Debug\SourceGenerator.csproj.CoreCompileInputs.cache
C:\Users\Admin\Downloads\GameEventSourceGenerator\SourceGenerator\obj\Debug\SourceGenerator.dll
C:\Users\Admin\Downloads\GameEventSourceGenerator\SourceGenerator\obj\Debug\SourceGenerator.pdb
C:\Users\Admin\Downloads\GameEventSourceGenerator\SourceGenerator\bin\Debug\SourceGenerator.deps.json
C:\Users\Admin\Downloads\GameEventSourceGenerator\SourceGenerator\bin\Debug\SourceGenerator.dll
C:\Users\Admin\Downloads\GameEventSourceGenerator\SourceGenerator\bin\Debug\SourceGenerator.pdb
E:\WorkSpace\ZGame\Tools\GameEventSourceGenerator\SourceGenerator\bin\Debug\SourceGenerator.deps.json
E:\WorkSpace\ZGame\Tools\GameEventSourceGenerator\SourceGenerator\bin\Debug\SourceGenerator.dll
E:\WorkSpace\ZGame\Tools\GameEventSourceGenerator\SourceGenerator\bin\Debug\SourceGenerator.pdb
E:\WorkSpace\ZGame\Tools\GameEventSourceGenerator\SourceGenerator\obj\Debug\SourceGenerator.csproj.AssemblyReference.cache
E:\WorkSpace\ZGame\Tools\GameEventSourceGenerator\SourceGenerator\obj\Debug\SourceGenerator.GeneratedMSBuildEditorConfig.editorconfig
E:\WorkSpace\ZGame\Tools\GameEventSourceGenerator\SourceGenerator\obj\Debug\SourceGenerator.AssemblyInfoInputs.cache
E:\WorkSpace\ZGame\Tools\GameEventSourceGenerator\SourceGenerator\obj\Debug\SourceGenerator.AssemblyInfo.cs
E:\WorkSpace\ZGame\Tools\GameEventSourceGenerator\SourceGenerator\obj\Debug\SourceGenerator.csproj.CoreCompileInputs.cache
E:\WorkSpace\ZGame\Tools\GameEventSourceGenerator\SourceGenerator\obj\Debug\SourceGenerator.sourcelink.json
E:\WorkSpace\ZGame\Tools\GameEventSourceGenerator\SourceGenerator\obj\Debug\SourceGenerator.dll
E:\WorkSpace\ZGame\Tools\GameEventSourceGenerator\SourceGenerator\obj\Debug\SourceGenerator.pdb

View File

@@ -0,0 +1 @@
{"documents":{"E:\\WorkSpace\\ZGame\\*":"https://raw.githubusercontent.com/Alex-Rachel/ZGame/b7d75c0f6f518a5f2ca0ed9304411302709f8dbe/*"}}

View File

@@ -0,0 +1,82 @@
{
"format": 1,
"restore": {
"E:\\WorkSpace\\ZGame\\Tools\\GameEventSourceGenerator\\SourceGenerator\\SourceGenerator.csproj": {}
},
"projects": {
"E:\\WorkSpace\\ZGame\\Tools\\GameEventSourceGenerator\\SourceGenerator\\SourceGenerator.csproj": {
"version": "1.0.0",
"restore": {
"projectUniqueName": "E:\\WorkSpace\\ZGame\\Tools\\GameEventSourceGenerator\\SourceGenerator\\SourceGenerator.csproj",
"projectName": "SourceGenerator",
"projectPath": "E:\\WorkSpace\\ZGame\\Tools\\GameEventSourceGenerator\\SourceGenerator\\SourceGenerator.csproj",
"packagesPath": "C:\\Users\\Admin\\.nuget\\packages\\",
"outputPath": "E:\\WorkSpace\\ZGame\\Tools\\GameEventSourceGenerator\\SourceGenerator\\obj\\",
"projectStyle": "PackageReference",
"configFilePaths": [
"C:\\Users\\Admin\\AppData\\Roaming\\NuGet\\NuGet.Config",
"C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.Offline.config"
],
"originalTargetFrameworks": [
"netstandard2.0"
],
"sources": {
"C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\": {},
"https://api.nuget.org/v3/index.json": {}
},
"frameworks": {
"netstandard2.0": {
"targetAlias": "netstandard2.0",
"projectReferences": {}
}
},
"warningProperties": {
"warnAsError": [
"NU1605"
]
},
"restoreAuditProperties": {
"enableAudit": "true",
"auditLevel": "low",
"auditMode": "direct"
}
},
"frameworks": {
"netstandard2.0": {
"targetAlias": "netstandard2.0",
"dependencies": {
"Microsoft.CodeAnalysis.Analyzers": {
"include": "Runtime, Build, Native, ContentFiles, Analyzers, BuildTransitive",
"suppressParent": "All",
"target": "Package",
"version": "[3.3.3, )"
},
"Microsoft.CodeAnalysis.CSharp": {
"suppressParent": "All",
"target": "Package",
"version": "[3.9.0, )"
},
"NETStandard.Library": {
"suppressParent": "All",
"target": "Package",
"version": "[2.0.3, )",
"autoReferenced": true
}
},
"imports": [
"net461",
"net462",
"net47",
"net471",
"net472",
"net48",
"net481"
],
"assetTargetFallback": true,
"warn": true,
"runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\8.0.300\\RuntimeIdentifierGraph.json"
}
}
}
}
}

View File

@@ -0,0 +1,21 @@
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
<RestoreSuccess Condition=" '$(RestoreSuccess)' == '' ">True</RestoreSuccess>
<RestoreTool Condition=" '$(RestoreTool)' == '' ">NuGet</RestoreTool>
<ProjectAssetsFile Condition=" '$(ProjectAssetsFile)' == '' ">$(MSBuildThisFileDirectory)project.assets.json</ProjectAssetsFile>
<NuGetPackageRoot Condition=" '$(NuGetPackageRoot)' == '' ">$(UserProfile)\.nuget\packages\</NuGetPackageRoot>
<NuGetPackageFolders Condition=" '$(NuGetPackageFolders)' == '' ">C:\Users\Admin\.nuget\packages\</NuGetPackageFolders>
<NuGetProjectStyle Condition=" '$(NuGetProjectStyle)' == '' ">PackageReference</NuGetProjectStyle>
<NuGetToolVersion Condition=" '$(NuGetToolVersion)' == '' ">6.12.2</NuGetToolVersion>
</PropertyGroup>
<ItemGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
<SourceRoot Include="C:\Users\Admin\.nuget\packages\" />
</ItemGroup>
<ImportGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
<Import Project="$(NuGetPackageRoot)microsoft.codeanalysis.analyzers\3.3.3\build\Microsoft.CodeAnalysis.Analyzers.props" Condition="Exists('$(NuGetPackageRoot)microsoft.codeanalysis.analyzers\3.3.3\build\Microsoft.CodeAnalysis.Analyzers.props')" />
</ImportGroup>
<PropertyGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
<PkgMicrosoft_CodeAnalysis_Analyzers Condition=" '$(PkgMicrosoft_CodeAnalysis_Analyzers)' == '' ">C:\Users\Admin\.nuget\packages\microsoft.codeanalysis.analyzers\3.3.3</PkgMicrosoft_CodeAnalysis_Analyzers>
</PropertyGroup>
</Project>

View File

@@ -0,0 +1,7 @@
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ImportGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
<Import Project="$(NuGetPackageRoot)netstandard.library\2.0.3\build\netstandard2.0\NETStandard.Library.targets" Condition="Exists('$(NuGetPackageRoot)netstandard.library\2.0.3\build\netstandard2.0\NETStandard.Library.targets')" />
<Import Project="$(NuGetPackageRoot)microsoft.codeanalysis.analyzers\3.3.3\build\Microsoft.CodeAnalysis.Analyzers.targets" Condition="Exists('$(NuGetPackageRoot)microsoft.codeanalysis.analyzers\3.3.3\build\Microsoft.CodeAnalysis.Analyzers.targets')" />
</ImportGroup>
</Project>

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,22 @@
{
"version": 2,
"dgSpecHash": "YK6sSPNENOs=",
"success": true,
"projectFilePath": "E:\\WorkSpace\\ZGame\\Tools\\GameEventSourceGenerator\\SourceGenerator\\SourceGenerator.csproj",
"expectedPackageFiles": [
"C:\\Users\\Admin\\.nuget\\packages\\microsoft.codeanalysis.analyzers\\3.3.3\\microsoft.codeanalysis.analyzers.3.3.3.nupkg.sha512",
"C:\\Users\\Admin\\.nuget\\packages\\microsoft.codeanalysis.common\\3.9.0\\microsoft.codeanalysis.common.3.9.0.nupkg.sha512",
"C:\\Users\\Admin\\.nuget\\packages\\microsoft.codeanalysis.csharp\\3.9.0\\microsoft.codeanalysis.csharp.3.9.0.nupkg.sha512",
"C:\\Users\\Admin\\.nuget\\packages\\microsoft.netcore.platforms\\1.1.0\\microsoft.netcore.platforms.1.1.0.nupkg.sha512",
"C:\\Users\\Admin\\.nuget\\packages\\netstandard.library\\2.0.3\\netstandard.library.2.0.3.nupkg.sha512",
"C:\\Users\\Admin\\.nuget\\packages\\system.buffers\\4.5.1\\system.buffers.4.5.1.nupkg.sha512",
"C:\\Users\\Admin\\.nuget\\packages\\system.collections.immutable\\5.0.0\\system.collections.immutable.5.0.0.nupkg.sha512",
"C:\\Users\\Admin\\.nuget\\packages\\system.memory\\4.5.4\\system.memory.4.5.4.nupkg.sha512",
"C:\\Users\\Admin\\.nuget\\packages\\system.numerics.vectors\\4.4.0\\system.numerics.vectors.4.4.0.nupkg.sha512",
"C:\\Users\\Admin\\.nuget\\packages\\system.reflection.metadata\\5.0.0\\system.reflection.metadata.5.0.0.nupkg.sha512",
"C:\\Users\\Admin\\.nuget\\packages\\system.runtime.compilerservices.unsafe\\5.0.0\\system.runtime.compilerservices.unsafe.5.0.0.nupkg.sha512",
"C:\\Users\\Admin\\.nuget\\packages\\system.text.encoding.codepages\\4.5.1\\system.text.encoding.codepages.4.5.1.nupkg.sha512",
"C:\\Users\\Admin\\.nuget\\packages\\system.threading.tasks.extensions\\4.5.4\\system.threading.tasks.extensions.4.5.4.nupkg.sha512"
],
"logs": []
}

View File

@@ -0,0 +1 @@
"restore":{"projectUniqueName":"E:\\WorkSpace\\ZGame\\Tools\\GameEventSourceGenerator\\SourceGenerator\\SourceGenerator.csproj","projectName":"SourceGenerator","projectPath":"E:\\WorkSpace\\ZGame\\Tools\\GameEventSourceGenerator\\SourceGenerator\\SourceGenerator.csproj","outputPath":"E:\\WorkSpace\\ZGame\\Tools\\GameEventSourceGenerator\\SourceGenerator\\obj\\","projectStyle":"PackageReference","originalTargetFrameworks":["netstandard2.0"],"sources":{"C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\":{},"https://api.nuget.org/v3/index.json":{}},"frameworks":{"netstandard2.0":{"targetAlias":"netstandard2.0","projectReferences":{}}},"warningProperties":{"warnAsError":["NU1605"]},"restoreAuditProperties":{"enableAudit":"true","auditLevel":"low","auditMode":"direct"}}"frameworks":{"netstandard2.0":{"targetAlias":"netstandard2.0","dependencies":{"Microsoft.CodeAnalysis.Analyzers":{"include":"Runtime, Build, Native, ContentFiles, Analyzers, BuildTransitive","suppressParent":"All","target":"Package","version":"[3.3.3, )"},"Microsoft.CodeAnalysis.CSharp":{"suppressParent":"All","target":"Package","version":"[3.9.0, )"},"NETStandard.Library":{"suppressParent":"All","target":"Package","version":"[2.0.3, )","autoReferenced":true}},"imports":["net461","net462","net47","net471","net472","net48","net481"],"assetTargetFallback":true,"warn":true,"runtimeIdentifierGraphPath":"C:\\Program Files\\dotnet\\sdk\\8.0.300\\RuntimeIdentifierGraph.json"}}

View File

@@ -0,0 +1 @@
17413576752312703

View File

@@ -0,0 +1 @@
17413576752312703

View File

@@ -1 +0,0 @@
目前使用luban-classic请自行导入

Some files were not shown because too many files have changed in this diff Show More