Api指南 - LightSun/Mvcs GitHub Wiki
目前整个框架包含2个核心派系。 控制器 (IController及其子类) 和 团队管理(StateTeamManager)。 其他相关的比较重要的就是抽象类AbstractState. 那么只要把这3个类的API理解。整个框架就so easy了。
它的api相当多。 毕竟代表了整个框架的核心api. 必调用的api.
//设置状态器创建的工厂.
void setStateFactory(StateFactory<S, P> factory)
//设置参数合并器.(一些实现类自动做了处理。)
void setParameterMerger(ParameterMerger<P> merger)
-
分当前状态和全局状态(全局状态方法较少)。
比如一个状态的enter可导致与之互斥状态的自动退出。
//添加一组相互互斥的状态。即,任意2个状态之间互斥。
addMutexState(int[] groupState)
//添加2组状态,组1的任意一个状态和 组2的所有状态互斥。 同理组2.
setMutexState(int[] groupState1, int[] groupState2);
比如我们写app常有这种需求。某个事件触发后,另外的事件将不再执行。直到该事件结束。
//锁定指定的事件
lockEvent(int... eventKeys)
// 解锁指定的事件.
unlockEvent(int... keys)
// 指定的事件是否被锁定。
isLockedEvent(int key)
//更新状态和消息. 给定的延迟和参数。
void update(long deltaTime, P param);
// 分发消息给状态,通过指定的策略和作用域.
boolean dispatchMessage(Message msg, @PolicyType byte policy, @ScopeFlags byte scope)
//删除指定的消息
void removeMessage(int what)
void removeMessage(Message expect)
//设置是否启用状态栈。启用后可以返回到上一个状态。
void setStateStackEnable(boolean enable)
//设置是否启用状态对象的缓存。以避免重复创建。
void setStateCacheEnabled(boolean enable)
//设置共享参数, 每当设置后,对状态的'增删改查' 都会携带这个参数。
void setShareStateParam(P param)
//设置是否启用团队。
void setTeamEnabled(boolean enable)
StateTeamManager 可以管理所有的团队, 并辅助管理它的成员。
//创建团队
static <P> Team<P> createTeam(List<Member<P>> formal, @Nullable List<Member<P>> outer);
static <P> Team<P> createTeam(List<Member<P>> formal, @Nullable List<Member<P>> outer,
TeamCallback<P> callback);
// 注册团队。 并返回对应的团队id号
int registerTeam(Team<P> team);
int registerTeam(List<Member<P>> formal, @Nullable List<Member<P>> outer, TeamCallback<P> callback) ;
int registerTeam(List<Member<P>> formal, @Nullable List<Member<P>> outer) ;
int registerTeam(List<Member<P>> formal);
//反注册团队
void unregisterTeam(Team<P> team) ;
void unregisterTeam(int teamId);
void unregisterAllTeam();
//根据团队id获取团队
Team<P> getTeam(int teamId);
//获取有指定成员的所有团队(不会重复)。
List<Team<P>> getTeams(Member<P> member, @Nullable List<Team<P>> outList) ;
//获取有指定正式成员的所有团队
List<Team<P>> getTeamsAsFormal(Member<P> member, @Nullable List<Team<P>> outList);
//获取有指定外围成员的所有团队
List<Team<P>> getTeamsAsOuter(Member<P> member, @Nullable List<Team<P>> outList);
//团队的更新
void update(int teamId, long deltaTime, P param);
void update(long deltaTime, P param);
//分发消息给指定团队或者所有团队, policy代表策略。是广播还是消费策略。
// memberFlags是否发送给成员(目前有正式formal和外围outer)的标志。
boolean dispatchMessage(int teamId, Message msg, @PolicyType byte policy, int memberFlags);
boolean dispatchMessage(Message msg, @PolicyType byte policy, int memberFlags);
//创建成员
static <P> Member<P> createMember(IController<? extends AbstractState<P>, P> controller,
int states, byte cooperateMethod);
static <P> Member<P> createMember(IController<? extends AbstractState<P>, P> controller, int states);
//添加正式成员
boolean addFormalMember(int teamId, Member<P> member);
boolean addFormalMemberStates(int teamId, IController<? extends AbstractState<P>, P> controller, int states);
//添加外围成员
boolean addOuterMember(int teamId, Member<P> member);
boolean addOuterMemberStates(int teamId, IController<? extends AbstractState<P>, P> controller, int states);
//删除正式成员或其部分状态
boolean deleteFormalMember(int teamId, IController<? extends AbstractState<P>, P> controller);
boolean deleteFormalMembeStates(int teamId, IController<? extends AbstractState<P>, P> controller,int targetStates);
//删除外围成员或其部分状态
boolean deleteOuterMember(int teamId, IController<? extends AbstractState<P>, P> controller);
boolean deleteOuterMembeStates(int teamId, IController<? extends AbstractState<P>, P> controller,int targetStates);
//状态进入时调用
void onEnter();
//状态再次进入时调用、前提是之前已经enter并且没有exit
void onReenter();
// 状态退出时调用
void onExit();
//更新状态,被controller.update方法调用
void onUpdate(long deltaTime, P param)
//释放资源的时候被调用。 called by controller.dispose().
void onDispose() ;
//是否被卸载
boolean isDetached();
//获取进入的次数.
int getEnterCount();
//获取挂载的controller. 如果被卸载,则抛出异常
IController<?, P> getController();
//通过controller获取owner. 如果被卸载,则抛出异常
Object getOwner() ;
//获取状态的id 一般是对应的flag. 2^n
int getId();
//处理消息。一般是通过controller.发送过来的。
boolean handleMessage(Message msg) ;