源战役客户端
您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符
 
 
 
 
 

75 行
2.5 KiB

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