|
楼主 |
发表于 2022-1-10 23:39:05
|
显示全部楼层
本帖最后由 jarlyyn 于 2022-1-11 01:11 PM 编辑
然后,我们在move.js里,需要统计一下最新的移动步数
- app.GetMoved=function(){
- gc()
- return moved.length
- }
- var moved=[]
- var gc=function(){
- newmoved=[]
- var now=(new Date()).getTime()
- moved.forEach(function(ts){
- if ((now-ts)<500){
- newmoved.push(ts)
- }
- })
- moved=newmoved
- }
- app.RegisterCallback("core.move.gc", function () {
- gc()
- })
- app.Bind("gc","core.move.gc")
- app.RegisterCallback("core.move.onroomobjend", function () {
- moved.push((new Date()).getTime())
- app.OnStateEvent("move.onRoomObjEnd")
- })
复制代码
很明显,我们创建了一个内部变量moved,用于储存近期行走的房间
在onRoomObjEnd里,负责向moved里推时间戳
把内部函数gc注册到gc事件里
然后增加一个App.Moved函数,用于调用gc,获取移动成功步数,
注意,gc事件在目前的代码里并不必要,只是为了以后可能会主动发送命令做准备
然后,在retry(行走失败)和 ignore(忽略的房间描述)的触发了,弹出最后一个时间戳
- app.Core.OnMoveRetry=function(name, output, wildcards){
- moved.splice(-1)
- app.OnStateEvent("move.retry")
- }
- app.Core.OnMoveIgnore=function(name, output, wildcards){
- moved.splice(-1)
- app.OnStateEvent("move.ignore")
- }
复制代码
移动指令就修改完了。
|
|