From 1755e61c486de15f0d6fe10b104101be666196fc Mon Sep 17 00:00:00 2001 From: walon Date: Thu, 22 Oct 2020 12:37:14 +0800 Subject: [PATCH] modify documents --- README.md | 50 ++++++++++++++++++++--- docs/index.md | 65 ++++++++++++++++++++++++------ docs/roadmap.md | 44 +++++--------------- src/Luban.Server/Source/Program.cs | 29 +++++++------ 4 files changed, 123 insertions(+), 65 deletions(-) diff --git a/README.md b/README.md index 0bbe712..0c1ad2c 100644 --- a/README.md +++ b/README.md @@ -3,16 +3,54 @@ # Luban -## 什么是 Luban +## 介绍 -Luban 是一个强大的生成与缓存工具,用于但不限于 游戏配置、消息、资源格式转换 之类的用途。 +Luban 是一个强大的生成与缓存工具。最初只用于对象生成,对象可以是常规代码、配置数据、类似protobuf的消息代码,也可以是游戏资源如assetbundle。 +在大型项目中,由于配置或资源数据庞大,生成对象可能会花费相当多的时间。比如一个典型的MMORPG项目,后期全量生成配置,即使用了多线程加速,所需时间 +也在10秒的级别。因此使用client/server模式,新增缓存机制来加速生成过程,能将生成时间时间降低到秒级,在项目中后期积少成多,可以帮助节省不少策划和程序的时间。 -相比传统简单的以excel为中心的表格导出工具,它提供了一个**完整的游戏配置数据解决方案**。 +Luban 最初是为了解决传统excel导出工具功能过于薄弱,无法很好解决MMORPG游戏复杂配置需求的痛点问题。 自2015年以来,经历过 MMORPG、卡牌、SLG 等多个上线项目的考验, +实际项目过程中不断迭代和优化,理解逐渐深入,最终由一个增强型的配置工具成为一个 **相对完备的游戏配置数据解决方案**。 -Luban 能够良好满足小型、中型、大型及超大型游戏项目的配置需求。 - -Luban 工具不仅适用于游戏行业,也非常适合传统的互联网项目。 +## 核心优势 +相对于传统excel导表工具,Luban的核心优势在于: +* 完备的数据类型系统,增强的excel格式支持。 + > 策划可以在excel里比较简洁填写出任意复杂的配置,比如 equips:list,Equip(包含 int id, string name, float attr) 这样一个复杂结构列表数据。而大多数导表工具 + 只支持 简单类型的列表,必须拆分为 equip_ids:list,int; equip_names:list,string;equip_attrs:list,float,无论对于策划还是程序都非常不友好。 +* 支持多态 bean + > 支持定义类似 父类Shape,子类 Circle,Rectange 这样的OOP类型体系,在表达复杂配置时极为有效,对程序友好,同时策划也可以比较简洁地配置出Shape数据,不必定义 + 一个通用型的包含所有字段的Shape了(对程序不友好,而且浪费内存)。 +* 先进的定义 + 数据源的设计,支持多数据源,统一所有游戏配置 + > 一个复杂项目中,总有一部分数据(10-20%)不适合excel编辑(比如技能、AI、副本等等),这些数据一般通过专用编辑器来编辑和导出。遇到的典型问题是,这种配置数据是无法 + 与excel数据统一处理的,造成游戏内有多种配置数据加载方案,程序需要花费很多时间去处理这些数据的加载问题。另外这些复杂数据无法使用数据检验和分组导出以及本地化 + 等等excel导表工具的机制。Lunan 能够处理 excel族、xml、json、lua、目录等多种数据源,统一导出数据和生成代码,所有数据源都能使用数据检验、分组导出等等机制, + 程序彻底从复杂配置处理中解脱出来。 +* 极快,大型项目也能秒级导出 + > 使用 client/server模式,利用服务器强大的硬件(大内存+多线程),同时配合缓存机制(如果数据和定义未修改,直接返回之前生成过的结果),即使到项目中后期数据规模比较 + 大也能1秒(传统在10秒以上)左右生成所有数据并且完成数据校验。考虑策划和程序经常使用生成工具,积少成多,也能节省大量研发时间。 +* 支持主流的游戏开发语言 + - c++ (11+) + - c# (.net framework 2+. dotnet core 2+) + - java (1.6+) + - go (1.10+) + - lua (5.1+) + - js 和 typescript (3.0+) + - python (2.7+ 及 3.0+) + +* 支持主流引擎 + - unity + c# + - unity + tolua,xlua + - unity + ILRuntime + - unreal + c++ + - unreal + unlua + - unreal + puerts + - cocos2d-x + lua + - cocos2d-x + js + - 微信小程序平台 + - 其他家基于js的小程序平台 + - 其他所有支持lua的引擎和平台 + - 其他所有支持js的引擎和平台 ## 文档 * [主页](https://focus-creative-games.github.io/luban/index.html) diff --git a/docs/index.md b/docs/index.md index bfa7fe2..45aaf58 100644 --- a/docs/index.md +++ b/docs/index.md @@ -1,17 +1,58 @@ -## 欢迎使用 bright_gen +# 欢迎使用 Luban -# 介绍 +## 介绍 -bright_gen 是 bright 高性能无状态支持分布式事务的游戏逻辑服务器框架的工具集的核心部分。包含以下功能 -1. db 支持事务的对象数据库代码生成 -2. proto 消息生成 -3. config 配置生成 - - -### 支持和联系 - -QQ 群: 692890842 -QQ 群名: Bright.Gen 开发交流群 +Luban 是一个强大的生成与缓存工具。最初只用于对象生成,对象可以是常规代码、配置数据、类似protobuf的消息代码,也可以是游戏资源如assetbundle。 +在大型项目中,由于配置或资源数据庞大,生成对象可能会花费相当多的时间。比如一个典型的MMORPG项目,后期全量生成配置,即使用了多线程加速,所需时间 +也在10秒的级别。因此使用client/server模式,新增缓存机制来加速生成过程,能将生成时间时间降低到秒级,在项目中后期积少成多,可以帮助节省不少策划和程序的时间。 + +Luban 最初是为了解决传统excel导出工具功能过于薄弱,无法很好解决MMORPG游戏复杂配置需求的痛点问题。 自2015年以来,经历过 MMORPG、卡牌、SLG 等多个上线项目的考验, +实际项目过程中不断迭代和优化,理解逐渐深入,最终由一个增强型的配置工具成为一个 **相对完备的游戏配置数据解决方案**。 + +## 核心优势 +相对于传统excel导表工具,Luban的核心优势在于: + +* 完备的数据类型系统,增强的excel格式支持。 + > 策划可以在excel里比较简洁填写出任意复杂的配置,比如 equips:list,Equip(包含 int id, string name, float attr) 这样一个复杂结构列表数据。而大多数导表工具 + 只支持 简单类型的列表,必须拆分为 equip_ids:list,int; equip_names:list,string;equip_attrs:list,float,无论对于策划还是程序都非常不友好。 +* 支持多态 bean + > 支持定义类似 父类Shape,子类 Circle,Rectange 这样的OOP类型体系,在表达复杂配置时极为有效,对程序友好,同时策划也可以比较简洁地配置出Shape数据,不必定义 + 一个通用型的包含所有字段的Shape了(对程序不友好,而且浪费内存)。 +* 先进的定义 + 数据源的设计,支持多数据源,统一所有游戏配置 + > 一个复杂项目中,总有一部分数据(10-20%)不适合excel编辑(比如技能、AI、副本等等),这些数据一般通过专用编辑器来编辑和导出。遇到的典型问题是,这种配置数据是无法 + 与excel数据统一处理的,造成游戏内有多种配置数据加载方案,程序需要花费很多时间去处理这些数据的加载问题。另外这些复杂数据无法使用数据检验和分组导出以及本地化 + 等等excel导表工具的机制。Lunan 能够处理 excel族、xml、json、lua、目录等多种数据源,统一导出数据和生成代码,所有数据源都能使用数据检验、分组导出等等机制, + 程序彻底从复杂配置处理中解脱出来。 +* 极快,大型项目也能秒级导出 + > 使用 client/server模式,利用服务器强大的硬件(大内存+多线程),同时配合缓存机制(如果数据和定义未修改,直接返回之前生成过的结果),即使到项目中后期数据规模比较 + 大也能1秒(传统在10秒以上)左右生成所有数据并且完成数据校验。考虑策划和程序经常使用生成工具,积少成多,也能节省大量研发时间。 +* 支持主流的游戏开发语言 + - c++ (11+) + - c# (.net framework 2+. dotnet core 2+) + - java (1.6+) + - go (1.10+) + - lua (5.1+) + - js 和 typescript (3.0+) + - python (2.7+ 及 3.0+) +* 支持主流引擎 + - unity + c# + - unity + tolua,xlua + - unity + ILRuntime + - unreal + c++ + - unreal + unlua + - unreal + puerts + - cocos2d-x + lua + - cocos2d-x + js + - 微信小程序平台 + - 其他家基于js的小程序平台 + - 其他所有支持lua的引擎和平台 + - 其他所有支持js的引擎和平台 + +## 支持和联系 + +QQ 群 : 692890842 +QQ 群名 : Luban 开发交流群 +邮箱 : taojingjian#gmail.com diff --git a/docs/roadmap.md b/docs/roadmap.md index f3017b3..e622a9b 100644 --- a/docs/roadmap.md +++ b/docs/roadmap.md @@ -1,40 +1,14 @@ -## 欢迎使用 gen +## road map 1 -##里程埤2 +* 补充单元测试 +* 新增静态本地化支持 +* 新增动态本地化支持 +* 新增生成用于unreal编辑器的 加载及保存json配置的cpp代码 +* 新增生成用于unity 编辑器的 加载及保存json配置的c#代码 -###新特性 -1. 新增 裸 cpp 、 java 及 js 支持 -2. 新增 unreal 的 蓝图 cpp 生成 -2.1 新增 unreal 蓝图 生成,支持热更新配置和蓝图 -2.2 新增 editor json加载及导出支持 -3. 新增时区和文本的静态本地化支持 -4. 新增 lua 数据格式导出 -5. 新增对unreal 的 datatable 格式 支持 -6. 优化 ref,path等validator的实现。 -###客户端引擎集成 -1. 新增 unity + xlua 、tolua、slua 集成 -2. 新增 unreal + unlua 集成 -3. 新增 unreal + purtjs 集成 -###服务器集成 -1. 新增 纯cpp 集成 -2. 新增 c# 集成 -3. 新增 go 集成 -4. 新增 java 集成 -5. 新增 c++ + lua 集成 -6. 新增 node.js 集成 -###文档 -1. 文档完善度100% (预计5-10万字) +## road map 2 -##里程碑3 -###新特性 -1. 新增 primitive type convert 支持. 比如支持常量替换 -2. 优化生成cache.如果定义相同,直接返回之前的生成结果。 -###引擎集成 -1. 新增 unity 内置编辑器 -2. 新增 unreal 内置编辑器3 - -## 里程碑4 -###单元测试 -1. 补充单元测试 +* 新增 unity 内嵌编辑器 +* 新增 unreal 内嵌编辑器 diff --git a/src/Luban.Server/Source/Program.cs b/src/Luban.Server/Source/Program.cs index c81157a..498b694 100644 --- a/src/Luban.Server/Source/Program.cs +++ b/src/Luban.Server/Source/Program.cs @@ -18,21 +18,26 @@ namespace Luban.Server public int Port { get; set; } = 8899; } - private static CommandLineOptions options; + private static CommandLineOptions ParseOptions(String[] args) + { + var helpWriter = new StringWriter(); + var parser = new Parser(ps => + { + ps.HelpWriter = helpWriter; + }); + + var result = parser.ParseArguments(args); + if (result.Tag == ParserResultType.NotParsed) + { + Console.Error.WriteLine(helpWriter.ToString()); + Environment.Exit(1); + } + return ((Parsed)result).Value; + } static void Main(string[] args) { - var parseResult = Parser.Default.ParseArguments(args); - - parseResult.WithNotParsed(errs => - { - Environment.Exit(-1); - }); - - parseResult.WithParsed(opts => - { - options = opts; - }); + var options = ParseOptions(args); Luban.Common.Utils.LogUtil.InitSimpleNLogConfigure(NLog.LogLevel.Info);