源战役客户端
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

75 regels
2.5 KiB

4 weken geleden
  1. --[[@------------------------------------------------------------------
  2. : Tip的操作包
  3. : deadline
  4. ----------------------------------------------------------------------]]
  5. NowOperateMove = NowOperateMove or BaseClass(NowOperate)
  6. local NowOperateMove = NowOperateMove
  7. local GlobalEventSystem = GlobalEventSystem
  8. local SceneManager = SceneManager
  9. function NowOperateMove:__init(start_time, start_pos, end_pos, is_last_tip,scene_obj)
  10. self.type = OperateManager.OperateType.Move
  11. self.start_pos = start_pos
  12. self.end_pos = end_pos
  13. self.is_last_tip = is_last_tip --是否是路径的最后一段
  14. self.scene_obj = scene_obj
  15. self.move_end_time = Status.NowTime
  16. self.is_end = false
  17. self.now_move_count = 0
  18. self.move_end_handle = nil
  19. self.is_already_do_move = false --是否已经执行移动操作
  20. end
  21. function NowOperateMove:__delete()
  22. if self.move_end_handle ~= nil then
  23. EventSystem.UnBind(GlobalEventSystem,self.move_end_handle)
  24. end
  25. if self.change_scene_handle then
  26. EventSystem.UnBind(GlobalEventSystem,self.change_scene_handle)
  27. end
  28. end
  29. function NowOperateMove:Init()
  30. --先检测能否立即移动再执行该操作
  31. self:DoMoveAction()
  32. return true
  33. end
  34. function NowOperateMove:DoMoveAction( )
  35. self.is_already_do_move = true
  36. --监听主角移动结束
  37. local move_end_callback = function ( tip_count )
  38. local scene_obj = self.scene_obj or Scene.Instance:GetMainRole()
  39. if scene_obj and scene_obj:GetType() == SceneBaseType.MainRole then
  40. self.is_end = true
  41. GlobalEventSystem:UnBind(self.move_end_handle)
  42. self.move_end_handle = nil
  43. end
  44. end
  45. --切换场景的时候,也要结束当前操作包
  46. local change_scene_func = function()
  47. self.is_end = true
  48. EventSystem.UnBind(GlobalEventSystem,self.change_scene_handle)
  49. self.change_scene_handle = nil
  50. end
  51. self.move_end_handle = EventSystem.Bind(GlobalEventSystem,SceneEventType.MAIN_ROLE_MOVE_END, move_end_callback)
  52. self.change_scene_handle = EventSystem.Bind(GlobalEventSystem,SceneManager.START, change_scene_func)
  53. --主角开始移动
  54. local scene_obj = self.scene_obj or Scene.Instance:GetMainRole()
  55. self.now_move_count = scene_obj:GetMoveTipCount() + 1 --此处自身计算当前的移动计数,
  56. --在主角移动结束事件触发之前产生该值
  57. scene_obj:DoMove(co.MulXYTable(self.end_pos, SceneObj.LogicRealRatio))
  58. end
  59. function NowOperateMove:ExcuteImpl(elaspe_time)
  60. --如果还未执行移动操作,则在合适的时间执行该操作
  61. if not self.is_already_do_move then
  62. self:DoMoveAction()
  63. end
  64. return self.is_end
  65. end