游戏生物的抽象
世界唯一对象 AbstractMirObject
构造器
public AbstractMirObject(IMirObjectSoulFill mirObjectSoulFill) {
setobjectId(mirObjectSoulFill.createId());
}
public interface IMirObjectSoulFill {
// 生成单位唯一id
long createId();
}
主要属性
- 对象唯一id
protected long objectId
- 对象id的包装类型
protected long objId
可见物 AbstractVisibleObject extends AbsreactMirObject
主要属性
- 配置id
int objectkey
- 观察者列表
KnownList knownList
- 视野位面
int planes
(决定视野可见,等于0表示可被所有位面可见) - 位置
WorldPosition position
- 控制器
AbstractVisibleObjectController controller
- 可见对象的目标
AbstractVisibleObject target
- 刷新资源
SpawnResource spawnResource
- 出生的X轴
bornX
- 出生的Y轴
bornY
朝向
DirectionEnum bornHeading
该对象的心跳业务
Map<ObjectTickType, objectTick><?> tickMap
主要用于防止取消心跳,统一取消是否为出生
boolean birth
用于客户端表现出生特效- 过滤器 FilterController filterController
- 人物状态
MergeSubmit<CreatureUpdateType> creatureUpdateTask
构造器
public AbstractVisibleObject(IVisibleObjectSoulFill visibleObjectSoulFill) {
super(visibleObjectSoulFill);
this.filterController = new FilterController();
this.objectKet = visibleObjectSoulFill.getObjKey();
this.controller = visibleObjectSoulFill.createController(this);
this.controller.setOwner(this);
this.position = visibleObjectSoulFill.createPosition();
this.knownList = visibleObjectSoulFill.createKnownList(this);
creatureUpdateTask = new MergeSubmit<>(CreatureUpdateType.class);
}
启动一个针对该对象的心跳,使用者要注意定时业务的回收,避免内存泄漏
public <T extends AbstractVisibleObject> ObjectTick<T> createTick(ObjectTickType tickType, long initialDelay, long initialDelay,
long initialDelay, long period, TimeUnit timeUnit, Tick<T> tick) {
ObjectTick exits = tickMap.remove(tickType);
if(exist != null) {
exist.tryCancle();
LOGGER.error("exist tick task"+ tickType);
}
ObjectTick<T> objectTick = ObjectTick.valueOf(tickType,(T) this, initialDelay, period, timeUnit);
tickMap.put(tickType,objectTick)
return objectTick;
}
添加会合并的延迟任务,同一种CreatureUpdateType
类型的任务.在延迟时间内提交过多次也只会执行一次
PS:这里的延迟任务是不保证关服时一定能够执行完成,如果必须是在关服前执行的任务,请在玩家等处或者停服接口处执行public void addMergeDelayTask(CreatureUpdateType type, int dispatcherCode, String name, int delay, TimeUnit timeUnit, Runnable runnable)
AbstractCreature
生物体,有血有肉的 AbstractCreature extends AbstractVisibleObject
- 攻击模式
- 移动控制器
- 使用中技能
- 生物血量状态
CreatureLifeStats<?> lifeStats
- 生物属性管理器
CreatureGameStats gameStats
- 效果管理器
- 事件管理器
ObserveController observeController
技能管理器
实际扣血控制器
所有的召唤物,每种类型的召唤物在场上可能有多个,像五条狗这种
Map<SummonType, List<Summon>>
有时效的标记
AgingMark<CreatureAgingMark> agingMark
构造器
public AbstractCreature(ICreatureSoulFill creatureSoulFill) {
super(creatureSoulFill);
this.lifeStats = creatureSoulFill.createLifeStats(this);
this.lifeStats.init();
this.moveController = new MoveController(this);
this.observeController = creatureSoulFill.createObserveController(this);
this.gameStats = creatureSoulFill.createCreatureGameStats(this);
this.effectController = creatureSoulFill.createEffectController(this);
this.skillController = creatureSoulFill.createSkillController(this);
this.agingMark = new AgingMark();
}
方法
- 获取单位等级
NPC Npc extends AbstractCreature
- 路由
RouteRoad
- AI
AbstractAi ai
- 生成时间
long createTime
- 抽象仇恨列表
AbstractAggroList aggroList
攻击时间
Map<Long, Long> ontrAttackTime
攻击控制器
NpcAttackController attackController
当前选中的目标
AbstractCreature curTarget
当前目标加入时间
long curTargetJoinTime
*
构造器
public NPC(INpcSoulFill npcSoulFill) {
super(npcSoulFill);
this.aggroList = npcSoulFill.createAggroList(this);
this.followPolicy = npcSoulFill.createFollowPolicy(this);
this.attackControler = ncSoulFill.createAttackController(this);
createTime = System.currentTimeMillis();
}
ObjectResource getObjectResource()
获取NVPC的对象配置ObjectFIghtAttrResource getObjectFightAttrResource()
怪物实体 Monster extends NPC
boolean needRefreshAggroList()
判断某些事情发生(仇恨列表中的玩家死亡)后,该怪物是否需要立刻刷新仇恨列表
重写的方法
Object createShowInfo(FightPlayer witness)
创建客户端显示用的信息体boolean canGo(int targetX, int targetY)
是否可以到达
NPC攻击控制器
- 攻击任务 `Future<?> attackTask