源战役客户端
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.

414 lines
17 KiB

  1. --[[
  2. @description:
  3. ]]
  4. require("game.welecome.WelecomeModel")
  5. require("game.welecome.WelecomeView")
  6. WelecomeController = WelecomeController or BaseClass(BaseController)
  7. function WelecomeController:__init()
  8. WelecomeController.Instance = self
  9. self.model = WelecomeModel:getInstance()
  10. self:RegisterAllProtocals()
  11. self:AddAllEvents()
  12. self.model.horse_fly_movie_is_playEnd = false --是否已经播放完了新手坐骑飞行展示
  13. end
  14. function WelecomeController:__delete()
  15. end
  16. function WelecomeController:RegisterAllProtocals()
  17. end
  18. function WelecomeController:StartUpdate()
  19. if self.horse_movie_config == nil then
  20. self.horse_movie_config = {}
  21. for i, vo in ipairs(Config.Horse_fly_info.list) do
  22. self.horse_movie_config[i] = DeepCopy(vo)
  23. end
  24. end
  25. Runner.Instance:AddRunObj(self)
  26. end
  27. function WelecomeController:StopUpdate()
  28. Runner.Instance:RemoveRunObj(self)
  29. end
  30. function WelecomeController:Update(now_time, elapsed_time)
  31. if self.model.horse_fly_movie_is_playEnd or self.horse_movie_config == nil or not Scene.Instance.main_role then return end
  32. local is_finish = true
  33. for i, vo in ipairs(self.horse_movie_config) do
  34. -- if not vo.has_trigger and (vo.time_out == nil or now_time <= vo.time_out) then
  35. if not vo.has_trigger then
  36. -- print("WelecomeController =", i)
  37. is_finish = false
  38. if vo.state_name then
  39. if vo.state_name == "creatHorse" then
  40. if self.main_role_horse_clone_role == nil then
  41. local m_role = RoleManager.Instance.mainRoleInfo
  42. local clone_id = SceneManager.Instance:CreateCloneRole(m_role.role_id, vo.x, vo.y, vo.horse_id, vo.birthAngle, m_role.name, vo.head_wear_id)
  43. self.main_role_horse_clone_role = Scene.Instance:GetRole(clone_id)
  44. self.main_role_horse_clone_role:SetModelHideFlag(SceneObj.ModelHideFlag.Story, true)
  45. self.main_role_horse_clone_role:SetModelHideFlag(SceneObj.ModelHideFlag.OnlyShowHorse, true)
  46. -- self.main_role_horse_clone_role:HideAllWeapon(Character.WeaponHideFlag.Story)
  47. self.main_role_horse_clone_role:SetShadowVisible(false)
  48. vo.has_trigger = true
  49. self.main_role_horse_clone_role.LoadHorseResCompleteUserDefined = function ()
  50. self.main_role_horse_clone_role:HideAllWeapon()
  51. self.main_role_horse_clone_role:DoStand()
  52. self.main_role_horse_clone_role:DoFly()
  53. end
  54. self.main_role_horse_clone_role.SetRealPosUserDefined = function (posx, posy)
  55. if self.is_jump_up and Scene.Instance.main_role then
  56. Scene.Instance.main_role:SetRealPos(posx, posy + (self.horse_height or 0) )
  57. end
  58. end
  59. self.main_role_horse_clone_role.SetBodyXYUserDefined = function (posx, posy)
  60. if self.is_jump_up and Scene.Instance.main_role then
  61. --Scene.Instance.main_role:SetBodyXY(posx, posy , true)
  62. end
  63. end
  64. end
  65. elseif vo.state_name == "catchMainRole" then
  66. if self.MainRoleJumpUpHorseCallBack == nil then
  67. self.MainRoleJumpUpHorseCallBack = function (use_fly_height_time, move_time, move_speed)
  68. self.main_role_horse_clone_role:SetModelHideFlag(SceneObj.ModelHideFlag.Story, false)
  69. vo.use_fly_height_time = use_fly_height_time - 0.1
  70. vo.move_time = move_time
  71. vo.move_speed = move_speed + 50
  72. end
  73. end
  74. elseif vo.state_name == "jumpDownHorse" then
  75. if not vo.jump_time then
  76. vo.jump_time = now_time + vo.start_jump_time or 0
  77. elseif now_time - vo.jump_time > 0 then
  78. GlobalEventSystem:Fire(EventName.JUMP_DOWN_HORSE, vo.x, vo.y)
  79. vo.has_trigger = true
  80. if self.main_role_move_event_id == nil then
  81. local function onMainRoleMoveHandler(x, y)
  82. if self.main_role_horse_clone_role and self.model.horse_fly_movie_is_playEnd then
  83. local x2, y2 = self.main_role_horse_clone_role:GetRealPos()
  84. if GameMath.GetDistance(x, y, x2, y2, false) > 1000 * 1000 then
  85. self.main_role_horse_clone_role:SetModelHideFlag(SceneObj.ModelHideFlag.OnlyShowHorse, false)
  86. SceneManager.Instance:DeleteRoleVo(self.main_role_horse_clone_role.id)
  87. self.main_role_horse_clone_role.LoadHorseResCompleteUserDefined = nil
  88. self.main_role_horse_clone_role.SetRealPosUserDefined = nil
  89. self.main_role_horse_clone_role.SetBodyXYUserDefined = nil
  90. self.main_role_horse_clone_role = nil
  91. if self.main_role_move_event_id then
  92. GlobalEventSystem:UnBind(self.main_role_move_event_id)
  93. self.main_role_move_event_id = nil
  94. end
  95. end
  96. end
  97. end
  98. self.main_role_move_event_id = GlobalEventSystem:Bind(ObjectEventType.MAINROLE_MOVE_EVENT, onMainRoleMoveHandler)
  99. end
  100. end
  101. end
  102. end
  103. if vo.fly_end_pos then
  104. local function call_back()
  105. vo.has_trigger = true
  106. end
  107. local x2, y2 = self.main_role_horse_clone_role:GetRealPos()
  108. if GameMath.GetDistance(vo.fly_end_pos.x, vo.fly_end_pos.y, x2, y2, false) > 100 * 100 then
  109. self.main_role_horse_clone_role:UpdateFlyWithPos(vo.fly_end_pos, vo.move_speed, elapsed_time, call_back)
  110. else
  111. call_back()
  112. end
  113. end
  114. if not vo.play_end_time then
  115. if vo.action_name then
  116. if self.main_role_horse_clone_role.horse_animator then
  117. self.main_role_horse_clone_role.horse_animator:CrossFade(vo.action_name, 0, 0, 0)
  118. self.main_role_horse_clone_role.horse_animator:Update(0)
  119. local action_time = 0
  120. local cur_state = self.main_role_horse_clone_role.horse_animator:GetCurrentAnimatorStateInfo(0)
  121. if cur_state then
  122. if vo.use_fly_height_time then
  123. vo.use_fly_height_time = vo.use_fly_height_time + now_time
  124. end
  125. action_time = cur_state.length
  126. end
  127. vo.play_end_time = now_time + action_time
  128. end
  129. elseif vo.move_time then
  130. vo.play_end_time = now_time + vo.move_time
  131. end
  132. elseif now_time - vo.play_end_time < 0 then
  133. if vo.move_time then
  134. local t = (vo.move_time - vo.play_end_time + now_time) / vo.move_time
  135. if t <= 1 then
  136. local move_speed = vo.move_speed + (vo.add_speed or 0) * t * vo.move_time
  137. local add_speed = (vo.move_speed + (vo.add_speed or 0) * vo.move_time)
  138. if add_speed ~= 0 then
  139. local angle = vo.dir1 + (vo.dir2 - vo.dir1) * t * move_speed / add_speed
  140. self.main_role_horse_clone_role:SetMoveSpeed(move_speed or 500)
  141. self.main_role_horse_clone_role:DoFly()
  142. local dir = GameMath.AngleToDirection(angle)
  143. self.main_role_horse_clone_role:UpdateFlyWithDir(dir, elapsed_time)
  144. if vo.height_off then
  145. local start_height = vo.start_height or 0
  146. local temp = vo.height_off-start_height
  147. self.main_role_horse_clone_role:SetBodyXY(0, start_height + temp * t * move_speed / add_speed)
  148. end
  149. end
  150. end
  151. end
  152. elseif now_time - vo.play_end_time >= 0 then
  153. vo.has_trigger = true
  154. end
  155. if vo.use_fly_height_time and now_time - vo.use_fly_height_time >= 0 then
  156. vo.use_fly_height_time = nil
  157. self.main_role_horse_clone_role:ResetResSize(true)
  158. self.horse_height = self.main_role_horse_clone_role.horse_res_size.z
  159. self.main_role_horse_clone_role:SetRealPos(self.main_role_horse_clone_role.real_pos.x, self.main_role_horse_clone_role.real_pos.y)
  160. end
  161. break
  162. end
  163. end
  164. if is_finish then
  165. self.model.horse_fly_movie_is_playEnd = true
  166. self:DeleteCoud()
  167. self:StopUpdate()
  168. end
  169. end
  170. --创建云
  171. function WelecomeController:CreateCoud()
  172. if self.big_coud then
  173. destroy(self.big_coud, true)
  174. end
  175. self.big_coud = UiFactory.createChild(panelMgr:GetParent("Main"),UIType.Image)
  176. self.big_coud.transform:SetAsFirstSibling()
  177. self.big_coud_height = 400
  178. self.big_coud_pos_y = ScreenHeight * 0.2 + self.big_coud_height * 0.5 + 50
  179. self.big_coud.transform.localPosition = Vector3(0, self.big_coud_pos_y, 0)
  180. if self.coun_ref_tar == nil then
  181. self.coun_ref_tar = {}
  182. end
  183. local function call_back()
  184. self.big_coud_has_loaded = true
  185. self.big_coud_height = self.big_coud.transform.sizeDelta.y
  186. self.big_coud_pos_y = ScreenHeight * 0.2 + self.big_coud_height * 0.5 + 50
  187. self.big_coud.transform.localPosition = Vector3(0, self.big_coud_pos_y, 0)
  188. end
  189. lua_resM:setImageSprite(self.coun_ref_tar, self.big_coud:GetComponent("Image"), "welecome_asset", "we_big_coud2", true, call_back)
  190. end
  191. function WelecomeController:DeleteCoud()
  192. if self.big_coud then
  193. if self.timer_id then
  194. GlobalTimerQuest:CancelQuest(self.timer_id)
  195. self.timer_id = nil
  196. end
  197. local alpha = 1
  198. local function onTimer()
  199. if alpha > 0.2 then
  200. alpha = alpha - 0.1
  201. SetAlpha(self.big_coud:GetComponent("Image"),alpha)
  202. else
  203. if self.timer_id then
  204. GlobalTimerQuest:CancelQuest(self.timer_id)
  205. self.timer_id = nil
  206. end
  207. destroy(self.big_coud)
  208. self.big_coud = nil
  209. end
  210. end
  211. self.timer_id = GlobalTimerQuest:AddPeriodQuest(onTimer, 0.05, -1)
  212. end
  213. self.big_coud_has_loaded = nil
  214. lua_resM:clearReference(self.coun_ref_tar)
  215. end
  216. function WelecomeController:PlayEnd()
  217. self:DeleteCoud()
  218. self:StopUpdate()
  219. self.model.forbid_move = false
  220. self.horse_movie_config = nil
  221. if self.main_role_horse_clone_role then
  222. self.main_role_horse_clone_role:SetModelHideFlag(SceneObj.ModelHideFlag.OnlyShowHorse, false)
  223. self.main_role_horse_clone_role.ignore_pool = true
  224. SceneManager.Instance:DeleteRoleVo(self.main_role_horse_clone_role.id)
  225. self.main_role_horse_clone_role.LoadHorseResCompleteUserDefined = nil
  226. self.main_role_horse_clone_role.SetRealPosUserDefined = nil
  227. self.main_role_horse_clone_role.SetBodyXYUserDefined = nil
  228. self.main_role_horse_clone_role = nil
  229. self.MainRoleJumpUpHorseCallBack = nil
  230. if Scene.Instance.main_role then
  231. Scene.Instance.main_role:SetBodyXY(0, 0, true)
  232. end
  233. end
  234. if self.main_role_move_event_id then
  235. GlobalEventSystem:UnBind(self.main_role_move_event_id)
  236. self.main_role_move_event_id = nil
  237. end
  238. if self.jump_up_horse_id then
  239. GlobalTimerQuest:CancelQuest(self.jump_up_horse_id)
  240. self.jump_up_horse_id = nil
  241. end
  242. self.is_jump_up = false
  243. self.model.has_start = false
  244. end
  245. function WelecomeController:AddAllEvents()
  246. --if ClientConfig.alpha_mode then return end
  247. -- local open_fun = function ()
  248. -- if not SceneManager:getInstance():IsSceneStart() then return end
  249. -- if RoleManager.Instance.mainRoleInfo.level<10 and TaskModel:getInstance():IsFisrtTask() and (SceneManager:getInstance():IsOutdoorScene() or SceneManager.Instance:IsMainCity()) then
  250. -- setTimeout(function()
  251. -- self:OpenWelecomeView()
  252. -- end,0.1)
  253. -- end
  254. -- if TaskModel:getInstance():IsDragonFlyTask() and SceneManager:getInstance():GetSceneId() == Config.Horse_fly_info.jump_point.scene_id then --飞龙任务
  255. -- if not self.model.horse_fly_movie_is_playEnd then
  256. -- GlobalEventSystem:Fire(EventName.STOP_AUTO_DO_TASK)
  257. -- GlobalEventSystem:Fire(EventName.JUMP_UP_HORSE)
  258. -- end
  259. -- end
  260. -- if TaskModel:getInstance():IsCreateDragonTask() and SceneManager:getInstance():GetSceneId() == Config.Horse_fly_info.jump_point.scene_id then
  261. -- if not self.model.has_start then
  262. -- self.model.has_start = true
  263. -- if Scene.Instance.main_role then
  264. -- Scene.Instance.main_role:SetBodyXY(0, 0, true)
  265. -- end
  266. -- self:StartUpdate()
  267. -- end
  268. -- elseif self.model.horse_fly_movie_is_playEnd then
  269. -- self:PlayEnd()
  270. -- end
  271. -- end
  272. -- TaskModel:getInstance():Bind(TaskEvent.TASK_LIST_INIT, open_fun)
  273. -- local function onSceneStart()
  274. -- open_fun()
  275. -- end
  276. -- GlobalEventSystem:Bind(SceneManager.START,onSceneStart)
  277. -- local function gameStartHandler()
  278. -- self:PlayEnd()
  279. -- end
  280. -- GlobalEventSystem:Bind(EventName.GAME_START, gameStartHandler)
  281. -- GlobalEventSystem:Bind(LoginStateEvent.START_LOGIN_MODULE, gameStartHandler)
  282. -- local function onMainRoleFLyingHandler(dir, dist)
  283. -- if self.is_jump_up and self.big_coud_has_loaded and self.big_coud then
  284. -- self.big_coud_pos_y = self.big_coud_pos_y - dist * 0.6
  285. -- self.big_coud.transform.localPosition = Vector3(0, self.big_coud_pos_y, 0)
  286. -- if self.big_coud_pos_y < -(ScreenHeight * 0.5 + self.big_coud_height * 0.5 + 50) then
  287. -- self.big_coud_pos_y = ScreenHeight * 0.2 + self.big_coud_height * 0.5 + 50
  288. -- self.big_coud.transform.localPosition = Vector3(0, self.big_coud_pos_y, 0)
  289. -- end
  290. -- end
  291. -- end
  292. -- GlobalEventSystem:Bind(SceneEventType.MAIN_ROLE_FLYING, onMainRoleFLyingHandler)
  293. -- local function onMainRoleUpJumpEndHandler()
  294. -- self.is_jump_up = true
  295. -- self:CreateCoud()
  296. -- if self.main_role_horse_clone_role then
  297. -- self.main_role_horse_clone_role:SetModelHideFlag(SceneObj.ModelHideFlag.OnlyShowHorse, false)
  298. -- if self.main_role_horse_clone_role.animator then
  299. -- self.main_role_horse_clone_role.animator:CrossFade("ride", 0, 0, 0)
  300. -- self.main_role_horse_clone_role.animator:Update(0)
  301. -- end
  302. -- end
  303. -- if Scene.Instance.main_role then
  304. -- -- Scene.Instance.main_role:DoFly()
  305. -- Scene.Instance.main_role:SetModelHideFlag(SceneObj.ModelHideFlag.Story, true)
  306. -- end
  307. -- end
  308. -- self:Bind(SceneEventType.MAIN_ROLE_JUMP_UP_HORSE_END, onMainRoleUpJumpEndHandler)
  309. -- local function onMainRoleDownJumpEndHandler()
  310. -- self.model.forbid_move = false
  311. -- GlobalEventSystem:Fire(EventName.FORCE_TO_DO_TASK)
  312. -- end
  313. -- self:Bind(SceneEventType.MAIN_ROLE_JUMP_DOWN_HORSE_END, onMainRoleDownJumpEndHandler)
  314. -- local function onMainRoleJumpUpHorseHandler()
  315. -- if Scene.Instance.main_role and self.main_role_horse_clone_role then
  316. -- local function moveEndFunc()
  317. -- local jump_point = co.Vector2(Config.Horse_fly_info.jump_point.x, Config.Horse_fly_info.jump_point.y)
  318. -- self.jump_up_horse_time = Scene.Instance.main_role:DoJumpUpHorse(jump_point) or 0
  319. -- local dir = co.TableXY(jump_point.x - self.main_role_horse_clone_role.real_pos.x, jump_point.y - self.main_role_horse_clone_role.real_pos.y)
  320. -- local total_distance = co.NormaliseXYTable(dir)
  321. -- if self.MainRoleJumpUpHorseCallBack then
  322. -- self.MainRoleJumpUpHorseCallBack(self.jump_up_horse_time, self.jump_up_horse_time, total_distance / self.jump_up_horse_time)
  323. -- end
  324. -- if self.jump_up_horse_id then
  325. -- GlobalTimerQuest:CancelQuest(self.jump_up_horse_id)
  326. -- self.jump_up_horse_id = nil
  327. -- end
  328. -- end
  329. -- -- local function onCheckToJump()
  330. -- -- if Scene.Instance.main_role then
  331. -- -- local start_jump_point = co.Vector2(Config.Horse_fly_info.start_jump_point.x, Config.Horse_fly_info.start_jump_point.y)
  332. -- -- local x1, y1 = Scene.Instance.main_role:GetRealPos()
  333. -- -- if GameMath.GetDistance(x1, y1, start_jump_point.x, start_jump_point.y, false) > 50 * 50 then
  334. -- -- local function end_func()
  335. -- -- moveEndFunc()
  336. -- -- end
  337. -- -- OperateManager.Instance:StartMoveAction(co.Vector2(start_jump_point.x / SceneObj.LogicRealRatio.x, start_jump_point.y / SceneObj.LogicRealRatio.y), end_func)
  338. -- -- else
  339. -- -- moveEndFunc()
  340. -- -- end
  341. -- -- else
  342. -- -- end
  343. -- -- end
  344. -- -- if self.jump_up_horse_id then
  345. -- -- GlobalTimerQuest:CancelQuest(self.jump_up_horse_id)
  346. -- -- self.jump_up_horse_id = nil
  347. -- -- end
  348. -- -- self.jump_up_horse_id = GlobalTimerQuest:AddPeriodQuest(onCheckToJump, 1, -1)
  349. -- -- onCheckToJump()
  350. -- -- moveEndFunc()
  351. -- --走到目的点才开始飞行
  352. -- local function call_back( )
  353. -- moveEndFunc()
  354. -- end
  355. -- local findVo = FindVo.New()
  356. -- findVo.sceneId = SceneManager:getInstance():GetSceneId()
  357. -- findVo.type = FindVo.POINT
  358. -- findVo.x=2325/ SceneObj.LogicRealRatio.x
  359. -- findVo.y=2918/ SceneObj.LogicRealRatio.y
  360. -- findVo.call_back = call_back
  361. -- GlobalEventSystem:Fire(EventName.FIND,findVo)
  362. -- self.model.forbid_move = true
  363. -- end
  364. -- end
  365. -- self:Bind(EventName.JUMP_UP_HORSE, onMainRoleJumpUpHorseHandler)
  366. -- local function onMainRoleJumpDownHorseHandler(x, y)
  367. -- if self.is_jump_up then
  368. -- self.is_jump_up = false
  369. -- if Scene.Instance.main_role and self.main_role_horse_clone_role then
  370. -- Scene.Instance.main_role:SetModelHideFlag(SceneObj.ModelHideFlag.Story, false)
  371. -- local rx, ry = self.main_role_horse_clone_role:GetRealPos()
  372. -- if self.main_role_horse_clone_role.transform then
  373. -- rx, ry = self.main_role_horse_clone_role.transform.position.x * MainCamera.PixelsToUnits, self.main_role_horse_clone_role.transform.position.y * MainCamera.PixelsToUnits
  374. -- end
  375. -- Scene.Instance.main_role:SetRealPos(rx, ry - 20)
  376. -- if Scene.Instance.main_role.animator then
  377. -- Scene.Instance.main_role.animator:CrossFade("ride", 0, 0, 0)
  378. -- end
  379. -- Scene.Instance.main_role:DoJumpDownHorse(co.Vector2(x, y))
  380. -- self.main_role_horse_clone_role:SetModelHideFlag(SceneObj.ModelHideFlag.OnlyShowHorse, true)
  381. -- end
  382. -- end
  383. -- end
  384. -- self:Bind(EventName.JUMP_DOWN_HORSE, onMainRoleJumpDownHorseHandler)
  385. end
  386. function WelecomeController:OpenWelecomeView()
  387. if self.welecomeView == nil then
  388. self.welecomeView = WelecomeView.New()
  389. end
  390. if not self.welecomeView:HasOpen() then
  391. self.welecomeView:Open()
  392. end
  393. end