前言
我们通常使用oop思想应对各种千奇百怪的需求,一般的配表只能使用单一的方式配置技能、ai等再让开发再次解析数据。luban不仅能实现list、map的多层嵌套,也能直接使用继承的方式快速实现类的多层嵌套,还使用限定类型来实现多态(不同类型使用同一接口),十分方便。
一、定义方式
1、excel方式定义
分别定义项目需要的父类、子类,指定子类的父类。限定列格式
2、xml方式定义
官方示例
<bean name="Shape">
<bean name="Circle">
<var name="radius" type="float"/>
</bean>
<bean name="Rectangle" alias="长方形">
<var name="width" type="float"/>
<var name="height" type="float"/>
</bean>
<bean name="Curve">
<bean name="Line" alias="直线">
<var name="param_a" type="float"/>
<var name="param_b" type="float"/>
</bean>
<bean name="Parabola" alias="抛物线">
<var name="param_a" type="float"/>
<var name="param_b" type="float"/>
</bean>
</bean>
</bean>
二、导出规则
并非所有定义的类型都会生成代码,必须满足以下规则之一:
被导出的table直接或者间接引用的类型。
root.xml 的 service的 ref项指定的类型。
如果没有引用想要导出,打开LuBan\Config\Defines目录下的root.xml文件如下进行添加ref项:
<root>
<topmodule name="cfg"/>
<patch name="cn"/>
<patch name="en"/>
<group name="c" default="1"/> client
<group name="s" 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">
<ref name = "platformData.Data"/>
<ref name = "platformData.NormalData"/>
<ref name = "platformData.GimData"/>
</service>
</root>
三、结果
可以看出key-value的形式,利用$type限定类型来指定不同的子类,比传统的type+string[]要好很多。
总结
记录luban的多态使用。