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