|
|
- --[[@------------------------------------------------------------------
- 说明: 控制人物移动一个小Tip的操作包
- 作者: deadline
- ----------------------------------------------------------------------]]
- NowOperateMove = NowOperateMove or BaseClass(NowOperate)
- local NowOperateMove = NowOperateMove
- local GlobalEventSystem = GlobalEventSystem
- local SceneManager = SceneManager
- function NowOperateMove:__init(start_time, start_pos, end_pos, is_last_tip,scene_obj)
- self.type = OperateManager.OperateType.Move
-
- self.start_pos = start_pos
- self.end_pos = end_pos
- self.is_last_tip = is_last_tip --是否是路径的最后一段
- self.scene_obj = scene_obj
-
- self.move_end_time = Status.NowTime
- self.is_end = false
- self.now_move_count = 0
- self.move_end_handle = nil
-
- self.is_already_do_move = false --是否已经执行移动操作
- end
-
- function NowOperateMove:__delete()
- if self.move_end_handle ~= nil then
- EventSystem.UnBind(GlobalEventSystem,self.move_end_handle)
- end
- if self.change_scene_handle then
- EventSystem.UnBind(GlobalEventSystem,self.change_scene_handle)
- end
- end
-
- function NowOperateMove:Init()
- --先检测能否立即移动再执行该操作
- self:DoMoveAction()
- return true
- end
-
- function NowOperateMove:DoMoveAction( )
- self.is_already_do_move = true
- --监听主角移动结束
- local move_end_callback = function ( tip_count )
- local scene_obj = self.scene_obj or Scene.Instance:GetMainRole()
- if scene_obj and scene_obj:GetType() == SceneBaseType.MainRole then
- self.is_end = true
- GlobalEventSystem:UnBind(self.move_end_handle)
- self.move_end_handle = nil
- end
- end
- --切换场景的时候,也要结束当前操作包
- local change_scene_func = function()
- self.is_end = true
- EventSystem.UnBind(GlobalEventSystem,self.change_scene_handle)
- self.change_scene_handle = nil
- end
- self.move_end_handle = EventSystem.Bind(GlobalEventSystem,SceneEventType.MAIN_ROLE_MOVE_END, move_end_callback)
- self.change_scene_handle = EventSystem.Bind(GlobalEventSystem,SceneManager.START, change_scene_func)
-
- --主角开始移动
- local scene_obj = self.scene_obj or Scene.Instance:GetMainRole()
-
- self.now_move_count = scene_obj:GetMoveTipCount() + 1 --此处自身计算当前的移动计数,
- --在主角移动结束事件触发之前产生该值
-
- scene_obj:DoMove(co.MulXYTable(self.end_pos, SceneObj.LogicRealRatio))
- end
-
- function NowOperateMove:ExcuteImpl(elaspe_time)
- --如果还未执行移动操作,则在合适的时间执行该操作
- if not self.is_already_do_move then
- self:DoMoveAction()
- end
- return self.is_end
- end
|