星际2技能系统分析(二)Ability(Move, Stop, Attack)
人族机枪兵,有移动,停止,攻击及兴奋剂四个技能,对应类图如下
CAbil
技能的虚基类,所有技能类都派生于它
属性
Name: 技能名称
SetId:唯一标识
Alignment:技能瞄准对象
TechPlayer:科技玩家
TechAliasArray:科技别名
SharedFlags:共享标签
XML定义
CAbilMove
移动技能基类
CmdButtonArray:技能按钮的值,关联CButton对象
FleeRange:当遭遇敌人攻击但又无法还击时,单位将逃跑的距离
FleeTime:单位逃离单次攻击时将会花费的最大时间
FllowAcquireRange:跟随搜索范围
FllowRangeSlop:跟随距离
MinPatrolDistance:最小巡逻距离
XML定义
实体类
移动实体类,根节点为继承的基类名, ID为实体类名
CAbilStop
停止技能基类
属性
XML定义
实体类
CAbilAttack
攻击技能基类
属性
MinAttackSpeedMultiplier:使用该技能后攻击速度提高的最小倍数。
MaxAttackSpeedMultiplier:使用该技能后攻击速度提高的最大倍数。
CmdButtonArray:技能的特定命令相关的数据
AcquireFilters:定义拥有该技能的单位可以自己获取的目标类型
AcquirePriority:当一个以上的同单位技能尝试自动获取目标时,返回最高的“获取有限级”的技能会最先有机会潜在目标。不会获取目标的技能应将之设为0。该值被设为0的技能不会获取目标。
SmartFilters:这些类型对象能被攻击
XML定义
实体类
执行逻辑
用CAbilMove举例
上图中重名文件是因为包含在不同的XML文件中,可以理解为存在与不同的类库里
每个对象除了基本的属性外,还可以挂载其他的模组,如按钮,单位,验证器等,基类挂载了按钮
实体类挂载了单位,验证器,移动器,移动器包含了飞行和地面两个
可以推算出其逻辑为
1.用户点击Move按钮
2.Move按钮找到当前单位的CMoveAbil
3.Move实体类找到对应的CMover
4.CMover根据Move实体类及单位的属性执行单位移动
类似于MVC模式
View(CButton)
Model(CAbil)
Controller(CMover)