|
--[[@------------------------------------------------------------------
|
|
说明: 控制人物移动一个小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
|