新的事件处理机制

功能

监视生物的行为状态(例如:生物开始移动(onCreatureStartMove),生物死亡(ICreatureDead),在不同的状态下产生相应的事件并通知感兴趣的对象做出相应的处理。

使用

1. 在/object/observer下定义事件接口(如果没有合适的事件)

public interface ICreatureXxx {
    // 这个事件机制基于apache.commons.lang3.evnet.EventListenerSupport,EventListenerSupport基于接口的动态代理实现,因此一个接口可以有多个方法
    void onCreatureXxx(...);
}

2. 事件触发

abstractCreature.getObserveController().fire(ICreatureUseXxx.class).onCreatureXxx(...);

3. 在对事件感兴趣的类上实现相应的接口

public class Xxx implements ICreatureXxx {
    @Override
    void onCreatureXxx(...) {

    }
}

4.把观察者添加到对应abstractCreature上

// xxx:观察者对象
absrtactCreature.getObserveController().attach(ICreatureXxx,xxx)

##不使用EventBus事件系统的原因

  1. EventBus是全局性质的事件机制,这里的事件机制是全生物状态的观察监听机制,也就是说,如果使用EventBus应当用submit(或者同步的synSubmit)发布事件时,所有的@ReceiverAnno注解的方法都会被触发,但是这里的事件机制只有attach到对应相应生物上的接口实现类的方法被触发。
  2. EventBus不具备移除观测者的功能。这里可以使用abstractCreature.getObserveController().removeObserver(ICreatureXxx,Xxx)移除迷人abstractCreature身上的特定观察者。