游戏开发中,策划就是导演,策划为了掌控游戏世界的规则,从而引入了策划配置文件.
Noark内置了CSV文件到JavaBean映射,由Excel到CSV文件请参考导表工具的实现
编码模板类文件ItemTemplate.java
@TplFile("Item.tpl")
public class ItemTemplate {
/** 道具编号 */
@TplAttr(name = "Id")
private String id;
/** 道具名称 */
@TplAttr(name = "Name")
private String name;
/** 品质 */
@TplAttr(name = "Quality")
private int quality;
/** 道具图标 */
@TplAttr(name = "ICON")
private String icon;
...省略GetSet方法
}
道具模板管理类ItemTemplateManager.java
@Service
public class ItemTemplateManager extends AbstractTemplateManager {
private Map<String, ItemTemplate> itemTemplates;
@Override
public String getModuleName() {
return "道具系统";
}
@Override
public void loadData() {
this.itemTemplates = templateLoader.loadAll(ItemTemplate.class, ItemTemplate::getId);
}
public ItemTemplate getItemTemplate(String id) {
return itemTemplates.get(id);
}
}
是不是很简单...
使用场景1:道具表被策划分为多个Sheet来存放,比如普通道具一个Sheet,宝石一个Sheet,装备一个Sheet,如何来写模板呢...
建筑策划同学道具共有配置把名称搞一致,方便抽象.
先来一个抽象类AbsItemTemplate,共有属性放这里,其他每一个功能实现一个子类...
如果策划作死,两个表中同一功能的配置名称不一,那就定义一个接口子类实现,只是日后维护有点蛋疼,祝你性福...
结论:Noark是支持父类中编写属性配置的
使用场景2:策划把XX属性配置给删了,但又想在日后加回来了...
直接参考编码
@TplAttr(name = "Level", required=false)
private int level = 1;
配置字段默认是必选项,但可以手工设置为false
结论:Noark是支持属性为非必选,在没有配置的情况下使用属性的默认值
使用场景3:策划想配置一个数组,比如 1,2,3,5,6,7
@TplAttr(name = "UnlockList")
private IntList unlockList;
IntList为Noark提供的int[]接口,具体由IntArrayList类实现,用法参考JDK的ArrayList
使用场景4:除了int, long, boolean, String, IntList还能使用哪些类型
目前默认支持JDK的基本数据类型和相关数组类型,自定义类型请参考转化器介绍
理论上支持所有数据类型的映射...