源战役客户端
Du kan inte välja fler än 25 ämnen Ämnen måste starta med en bokstav eller siffra, kan innehålla bindestreck ('-') och vara max 35 tecken långa.

894 rader
27 KiB

4 veckor sedan
  1. JumpOneModel = JumpOneModel or BaseClass(BaseVo, true)
  2. local JumpOneModel = JumpOneModel
  3. JumpOneModel.REQUEST_INFO = "JumpOneModel.REQUEST_INFO"--请求协议
  4. JumpOneModel.OPEN_JUMP_ONE_MAIN_VIEW = "JumpOneModel.OPEN_JUMP_ONE_MAIN_VIEW"--打开活动主界面
  5. JumpOneModel.OPEN_JUMP_ONE_SCENE_VIEW = "JumpOneModel.OPEN_JUMP_ONE_SCENE_VIEW"--打开跳一跳场景界面
  6. JumpOneModel.JUMP_UPDATE_BASEINFO = "JumpOneModel.JUMP_UPDATE_BASEINFO"--跳一跳刷新匹配信息
  7. JumpOneModel.JUMP_UPDATE_MATCHINFO = "JumpOneModel.JUMP_UPDATE_MATCHINFO"--跳一跳刷新匹配信息
  8. JumpOneModel.JUMP_UPDATE_MATCH_MEMBERS = "JumpOneModel.JUMP_UPDATE_MATCH_MEMBERS"--跳一跳刷新匹配队员
  9. JumpOneModel.JUMP_UPDATE_GAME_INFO = "JumpOneModel.JUMP_UPDATE_GAME_INFO"--跳一跳游戏信息
  10. JumpOneModel.JUMP_UPDATE_READY_TIME = "JumpOneModel.JUMP_UPDATE_READY_TIME"--跳一跳准备倒计时
  11. JumpOneModel.JUMP_ADD_STEP = "JumpOneModel.JUMP_ADD_STEP"--跳一跳增加跳台
  12. JumpOneModel.JUMP_START_JUMP = "JumpOneModel.JUMP_START_JUMP"--跳一跳开始跳跃
  13. JumpOneModel.JUMP_UPDATE_MEMBER_INFO = "JumpOneModel.JUMP_UPDATE_MEMBER_INFO"--跳一跳更新玩家信息
  14. JumpOneModel.JUMP_OFF_LINE_UPDATE = "JumpOneModel.JUMP_OFF_LINE_UPDATE"--跳一跳离线更新
  15. JumpOneModel.JUMP_ON_LINE_UPDATE = "JumpOneModel.JUMP_ON_LINE_UPDATE"--跳一跳上线更新
  16. JumpOneModel.OPEN_JUMP_ONE_RESULT_VIEW = "JumpOneModel.OPEN_JUMP_ONE_RESULT_VIEW"--跳一跳上结算界面
  17. JumpOneModel.JUMP_END_NOTIFY = "JumpOneModel.JUMP_END_NOTIFY"--跳一跳跳跃结果通知
  18. JumpOneModel.JUMP_GAME_END_NOTIFY = "JumpOneModel.JUMP_GAME_END_NOTIFY"--跳一跳游戏结束
  19. JumpOneModel.JUMP_GAME_RESULT_NOTIFY = "JumpOneModel.JUMP_GAME_RESULT_NOTIFY"--跳一跳游戏结算
  20. local GameMath_GetDistance = GameMath.GetDistance
  21. function JumpOneModel:__init()
  22. JumpOneModel.Instance = self
  23. self:Reset()
  24. end
  25. JumpOneModel.STEP_START_ID = 1000
  26. JumpOneModel.SCENE_HEIGHT = 1.1
  27. JumpOneModel.GAME_STATE =
  28. {
  29. WAIT = 1,
  30. READY = 2,
  31. GAME = 3,
  32. END = 4,
  33. }
  34. JumpOneModel.JUMP_TOUCH_STATE =
  35. {
  36. NONE = 1,
  37. DOWN = 2,
  38. UP = 3,
  39. END = 4,
  40. }
  41. JumpOneModel.PLAYER_STATE =
  42. {
  43. OFF_LINE = 0, --离线
  44. ON_LINE = 1, --正常在线
  45. WAITING = 2, --等待进场
  46. GAME_OUT = 3, --已经淘汰
  47. }
  48. function JumpOneModel:Reset()
  49. self.view_info = {}--界面信息
  50. self.reward_info = {}--奖励列表
  51. self.game_info = {} --游戏信息
  52. self.act_cfg = {} --活动配置
  53. self.result_info = false--结算数据
  54. self.is_quit_game = false--是否手动退出
  55. end
  56. function JumpOneModel:getInstance()
  57. if JumpOneModel.Instance == nil then
  58. JumpOneModel.Instance = JumpOneModel.New()
  59. end
  60. return JumpOneModel.Instance
  61. end
  62. --检测竞榜和图标是否需要开启
  63. function JumpOneModel:SetActCfg(vo)
  64. self.act_cfg = {}
  65. self.act_cfg[vo.sub_type] = vo
  66. end
  67. --获取活动配置
  68. function JumpOneModel:GetActCfg()
  69. for k,v in pairs(self.act_cfg) do
  70. return v
  71. end
  72. end
  73. --检测竞榜和图标是否需要开启
  74. function JumpOneModel:CheckJumpOneIconBoolOpen()
  75. if #self.act_cfg == 0 then
  76. return
  77. end
  78. if not GetModuleIsOpen(331, 121, true) then
  79. return
  80. end
  81. local base_type = CustomActivityModel.CustomActBaseType.JUMP_ONE
  82. for k,v in pairs(self.act_cfg) do
  83. local icon_sub_type = base_type*1000 + v.sub_type
  84. if v.sub_type >= 10001 then
  85. icon_sub_type = base_type*100000 + v.sub_type
  86. end
  87. local cfg = v
  88. if cfg and self.view_info and self.view_info.base_info and self.view_info.base_info.end_time then
  89. local server_time = TimeUtil:getServerTime()
  90. local is_open = self.view_info.base_info.end_time - server_time
  91. if is_open > 0 then
  92. ActivityIconManager:getInstance():addIcon(icon_sub_type, is_open)
  93. else
  94. ActivityIconManager:getInstance():deleteIcon(icon_sub_type)
  95. end
  96. else
  97. ActivityIconManager:getInstance():deleteIcon(icon_sub_type)
  98. end
  99. end
  100. end
  101. --检测竞榜和图标是否需要显示匹配
  102. function JumpOneModel:CheckJumpOneIconMatch()
  103. if #self.act_cfg == 0 then
  104. return
  105. end
  106. if not GetModuleIsOpen(331, 121, true) then
  107. return
  108. end
  109. local base_type = CustomActivityModel.CustomActBaseType.JUMP_ONE
  110. for k,v in pairs(self.act_cfg) do
  111. local sub_base_type = base_type*1000
  112. local cfg = v
  113. if cfg then
  114. GlobalEventSystem:Fire(ActivityIconManager.UPDATE_FUNCICON_SPECIAL_TIPS, sub_base_type+v.sub_type)
  115. end
  116. end
  117. end
  118. --设置活动开放信息
  119. function JumpOneModel:SetOpenInfo(vo)
  120. self.view_info.base_info = self.view_info.base_info or {}
  121. self.view_info.base_info.end_time = vo.end_time
  122. self:CheckJumpOneIconBoolOpen()
  123. end
  124. --设置基本信息
  125. function JumpOneModel:SetJumoOneInfo(vo)
  126. self.view_info = self.view_info or {}
  127. self.view_info.base_info = vo
  128. self:CheckJumpOneIconBoolOpen()
  129. self:Fire(JumpOneModel.JUMP_UPDATE_BASEINFO)
  130. end
  131. --设置匹配信息
  132. function JumpOneModel:SetJumoOneMatchInfo(vo)
  133. self.view_info = self.view_info or {}
  134. self.view_info.match_info = vo
  135. self:CheckJumpOneIconMatch()
  136. self:Fire(JumpOneModel.JUMP_UPDATE_MATCHINFO)
  137. end
  138. --当前是否在匹配状态
  139. function JumpOneModel:IsInJumoOneMatchState()
  140. if self.view_info and self.view_info.match_info then
  141. return self.view_info.match_info.status == 1
  142. end
  143. return false
  144. end
  145. --设置匹配队员列表
  146. function JumpOneModel:SetJumoOneMatchMembers(vo)
  147. self.view_info = self.view_info or {}
  148. self.view_info.match_members = vo
  149. self:Fire(JumpOneModel.JUMP_UPDATE_MATCH_MEMBERS)
  150. end
  151. --当前是否在匹配状态
  152. function JumpOneModel:GetJumoOneMatchMembers()
  153. if self.view_info and self.view_info.match_members then
  154. return self.view_info.match_members.role_list
  155. end
  156. return nil
  157. end
  158. --清除匹配状态
  159. function JumpOneModel:ResetJumoOneMatchInfo()
  160. self.view_info = {}
  161. self.game_info = {}
  162. self:CheckJumpOneIconMatch()
  163. end
  164. --设置跳一跳开始倒计时时间
  165. function JumpOneModel:SetJumpOneReadyTIme(vo)
  166. self.game_info = self.game_info or {}
  167. self.game_info.ready_info = vo
  168. self.game_info.ready_info.left_time = vo.time - TimeUtil:getServerTime() + 1
  169. self.game_info.game_state = JumpOneModel.GAME_STATE.READY
  170. self:Fire(JumpOneModel.JUMP_UPDATE_READY_TIME)
  171. end
  172. --设置跳一跳游戏信息
  173. function JumpOneModel:SetJumpOneGameInfo(vo)
  174. self.game_info = {}
  175. self.game_info.game_info = vo
  176. self.game_info.game_state = JumpOneModel.GAME_STATE.WAIT
  177. local step_vo =
  178. {
  179. x = vo.x,
  180. y = vo.y,
  181. picture = vo.picture,
  182. radius = vo.radius,
  183. is_new = false,
  184. }
  185. vo.step_list =
  186. {
  187. [1] = step_vo,
  188. }
  189. if vo and #vo.step_list > 0 then
  190. for i,v in ipairs(vo.step_list) do
  191. v.step_id = JumpOneModel.STEP_START_ID + i
  192. Scene.Instance:CreateJumpOneStep(v, v.step_id)
  193. end
  194. end
  195. local role_list = vo.role_list
  196. for i,v in ipairs(role_list) do
  197. if v.life ~= 0 then
  198. if v.online == 1 then
  199. v.player_state = JumpOneModel.PLAYER_STATE.ONELINE
  200. else
  201. v.player_state = JumpOneModel.PLAYER_STATE.WAITING
  202. end
  203. else
  204. v.player_state = JumpOneModel.PLAYER_STATE.GAME_OUT
  205. end
  206. end
  207. self.game_info.game_info.role_list = role_list
  208. self:SyncAllRolePos(vo.x, vo.y)
  209. self:UpdateMemberVisible()
  210. self.is_quit_game = false
  211. self:Fire(JumpOneModel.JUMP_UPDATE_GAME_INFO)
  212. end
  213. --设置跳一跳新跳台
  214. function JumpOneModel:JumpOneAddNewStep(vo)
  215. if not vo then
  216. return
  217. end
  218. local step_vo =
  219. {
  220. x = vo.x,
  221. y = vo.y,
  222. picture = vo.picture,
  223. radius = vo.radius,
  224. is_end = vo.is_end,
  225. is_new = true,
  226. }
  227. self.game_info.game_info = self.game_info.game_info or {}
  228. self.game_info.game_info.step_list = self.game_info.game_info.step_list or {}
  229. local list = self.game_info.game_info.step_list
  230. local step_id = JumpOneModel.STEP_START_ID + 1
  231. if #list >= 5 then
  232. local step_info = list[1]
  233. Scene.Instance:DeleteJumpOneStep(step_info.step_id)
  234. table.remove(list, 1)
  235. end
  236. if #list > 0 then
  237. step_id = list[#list].step_id + 1
  238. end
  239. step_vo.step_id = step_id
  240. table.insert(list , step_vo)
  241. self.game_info.game_info.step_list = list
  242. Scene.Instance:CreateJumpOneStep(step_vo, step_vo.step_id)
  243. self:UpdateMemberDir(vo.x, vo.y)
  244. end
  245. --设置跳一跳新跳台
  246. function JumpOneModel:StartJump(vo)
  247. if not vo then
  248. return
  249. end
  250. self.game_info.is_sync_pos = false
  251. self.game_info.game_info = self.game_info.game_info or {}
  252. self.game_info.game_info.cur_jump_info = vo
  253. local left_jump_time = vo.jump_time - TimeUtil:getServerTime()
  254. local max_jump_time = self:GetMaxJumpTime()
  255. self.game_info.game_info.cur_jump_info.left_jump_time = left_jump_time > max_jump_time and max_jump_time or left_jump_time
  256. self.game_info.game_info.cur_jump_info.max_jump_time = max_jump_time
  257. self.game_info.game_info.round = vo.round
  258. self.game_info.game_state = JumpOneModel.GAME_STATE.GAME
  259. self:SetJumpTouchState(JumpOneModel.JUMP_TOUCH_STATE.NONE)
  260. local main_role = Scene.Instance.main_role
  261. if main_role then
  262. local pos_x, pos_y = main_role:GetRealPos()
  263. self:SyncAllRolePos(pos_x, pos_y)
  264. end
  265. self:UpdateMemberVisible()
  266. self:Fire(JumpOneModel.JUMP_START_JUMP)
  267. end
  268. --是否是我的回合
  269. function JumpOneModel:IsMyTurn()
  270. local cur_jump_info = self.game_info.game_info and self.game_info.game_info.cur_jump_info
  271. if cur_jump_info and RoleManager.Instance.mainRoleInfo.role_id == cur_jump_info.role_id then
  272. return true
  273. end
  274. end
  275. --获取当前回合
  276. function JumpOneModel:GetCurTurn()
  277. if self.game_info.game_info and self.game_info.game_info.round then
  278. return self.game_info.game_info.round
  279. end
  280. return 1
  281. end
  282. --跳一跳获取房间id
  283. function JumpOneModel:GetRoomId()
  284. return self.game_info.game_info and self.game_info.game_info.room_id or 1
  285. end
  286. --跳一跳跳跃处理
  287. function JumpOneModel:JumpOneDoJumpHandle(role_id, jump_time)
  288. local role = Scene.Instance:GetRole(role_id)
  289. local last_step_info = self:GetLastStepInfo()
  290. if role and last_step_info then
  291. if jump_time > self:GetJumpMaxTouchTime() then
  292. jump_time = self:GetJumpMaxTouchTime()
  293. end
  294. local is_success = self:CheckJumpResult(role, jump_time, last_step_info.x, last_step_info.y)
  295. local distance = nil
  296. local dir = role.direction
  297. local dist,move_hspeed,move_vspeed = role:GetGameJumpDistanceAndSpeed(jump_time)
  298. local end_pos = co.TableXY(math.floor(role.real_pos.x + dir.x * dist) , math.floor(role.real_pos.y + dir.y * dist))
  299. local start_pos = co.TableXY(role.real_pos.x, role.real_pos.y)
  300. local function onJumpEnd()
  301. self:Fire(JumpOneModel.JUMP_END_NOTIFY, is_success and 1 or 0)
  302. end
  303. role:DoGameFlyJump(end_pos,start_pos,move_hspeed,move_vspeed,onJumpEnd,not is_success)
  304. if self:IsMyTurn() then
  305. self:SyscJumpHandle(end_pos.x, end_pos.y, jump_time, is_success)
  306. end
  307. end
  308. end
  309. --跳一跳跳跃处理
  310. function JumpOneModel:JumpOneDoJumpHandleFromServer(role_id, jump_time,status, pos_x, pos_y)
  311. local last_step_info = self:GetLastStepInfo()
  312. local role_list = self:GetGameMemberInfo()
  313. if last_step_info and role_list and #role_list > 0 then
  314. for k,v in pairs(role_list) do
  315. if self:IsMyTurn() then
  316. if status == 1 and v.role_id ~= RoleManager.Instance.mainRoleInfo.role_id then
  317. local role = Scene.Instance:GetRole(v.role_id)
  318. if role then
  319. role:SetRealPos(pos_x, pos_y)
  320. end
  321. end
  322. else
  323. if v.role_id == role_id then
  324. local role = Scene.Instance:GetRole(v.role_id)
  325. if role then
  326. local is_success = status == 1
  327. local distance = nil
  328. local dir = role.direction
  329. local dist,move_hspeed,move_vspeed = role:GetGameJumpDistanceAndSpeed(jump_time)
  330. local end_pos = co.TableXY(math.floor(role.real_pos.x + dir.x * dist) , math.floor(role.real_pos.y + dir.y * dist))
  331. local start_pos = co.TableXY(role.real_pos.x, role.real_pos.y)
  332. local function onJumpEnd()
  333. if status == 1 then
  334. --如果触发到了下一个传送点,则同步到下一个传送点的位置
  335. print('Cat:JumpOneModel.lua[353] data', self.game_info.is_sync_pos, pos_x, pos_y)
  336. if self.game_info.is_sync_pos then
  337. PrintTable(self.game_info.is_sync_pos)
  338. self:SyncAllRolePos(self.game_info.is_sync_pos.x, self.game_info.is_sync_pos.y)
  339. else
  340. self:SyncAllRolePos(pos_x, pos_y)
  341. end
  342. end
  343. self:Fire(JumpOneModel.JUMP_END_NOTIFY, status)
  344. end
  345. role:DoGameFlyJump(end_pos,start_pos,move_hspeed,move_vspeed,onJumpEnd,not is_success, true)
  346. end
  347. end
  348. end
  349. end
  350. end
  351. end
  352. --等待玩家跳跃完成,在同步位置
  353. function JumpOneModel:SyncAllRolePos(x, y )
  354. local role_list = self:GetGameMemberInfo()
  355. if role_list and #role_list > 0 then
  356. for k,v in pairs(role_list) do
  357. local role = Scene.Instance:GetRole(v.role_id)
  358. if role then
  359. role:SetRealPos(x, y)
  360. end
  361. end
  362. end
  363. end
  364. --等待玩家跳跃完成,在同步位置
  365. function JumpOneModel:SyncTargetRolePos(x, y,role_id)
  366. local role_list = self:GetGameMemberInfo()
  367. if role_list and #role_list > 0 then
  368. for k,v in pairs(role_list) do
  369. if v.role_id == role_id then
  370. local role = Scene.Instance:GetRole(v.role_id)
  371. if role then
  372. role:SetRealPos(x, y)
  373. end
  374. break
  375. end
  376. end
  377. end
  378. end
  379. --跳一跳完美跳跃 *********** 内挂
  380. function JumpOneModel:JumpOneDoMvpJumpHandle(role_id)
  381. local role = Scene.Instance:GetRole(role_id)
  382. local last_step_info = self:GetLastStepInfo()
  383. if role and last_step_info then
  384. local is_success = true
  385. local end_pos = co.TableXY(last_step_info.x , last_step_info.y)
  386. local start_pos = co.TableXY(role.real_pos.x, role.real_pos.y)
  387. local dis = GameMath_GetDistance(end_pos.x, end_pos.y, start_pos.x, start_pos.y, true)
  388. local move_hspeed ,move_vspeed, jump_time = role:GetGameMvpJumpSpeedAndTime(dis)
  389. local function onJumpEnd()
  390. self:Fire(JumpOneModel.JUMP_END_NOTIFY, 1)
  391. end
  392. role:DoGameFlyJump(end_pos,start_pos,move_hspeed,move_vspeed,onJumpEnd,not is_success)
  393. jump_time = math.floor(jump_time * 1000)
  394. if self:IsMyTurn() then
  395. self:SyscJumpHandle(end_pos.x, end_pos.y, jump_time, is_success)
  396. end
  397. --GlobalEventSystem:Fire(SceneEventType.GAME_FLY_JUMP, jump_time,nil,nil,nil,nil,is_fail)
  398. end
  399. end
  400. --跳一跳同步跳跃
  401. function JumpOneModel:SyscJumpHandle(pos_x, pos_y, jump_time, is_success)
  402. local room_id = self:GetRoomId()
  403. local status = is_success and 1 or 0
  404. local ticket = string.lower(Util.md5(room_id .. pos_x .. pos_y .. status .. jump_time .. "666JKLSDFRTYABJK666"))
  405. local sub_type = self:GetActSubType()
  406. self:Fire(JumpOneModel.REQUEST_INFO, 45910,room_id, pos_x, pos_y, status, jump_time, ticket, sub_type)
  407. end
  408. --跳一跳,服务器返回起跳准备处理
  409. function JumpOneModel:JumpOneReadyJumpHandleFromServer(role_id)
  410. --每次起跳前,同步下所有人的坐标和朝向
  411. local main_role = Scene.Instance.main_role
  412. if main_role then
  413. local pos_x, pos_y = main_role:GetRealPos()
  414. self:SyncAllRolePos(pos_x, pos_y)
  415. end
  416. local last_step_info = self:GetLastStepInfo()
  417. if last_step_info then
  418. self:UpdateMemberDir(last_step_info.x, last_step_info.y)
  419. end
  420. self:JumpOneReadyJumpHandle(role_id, true)
  421. end
  422. --跳一跳起跳跳跃处理
  423. function JumpOneModel:JumpOneReadyJumpHandle(role_id, from_server)
  424. if from_server and role_id == RoleManager.Instance.mainRoleInfo.role_id then
  425. return
  426. end
  427. local role = Scene.Instance:GetRole(role_id)
  428. if role then
  429. role:DoGameReadyJump()
  430. end
  431. end
  432. --跳一跳起跳跳跃处理
  433. function JumpOneModel:JumpOneJumpHandle(role_id)
  434. local role = Scene.Instance:GetRole(role_id)
  435. if role then
  436. role:DoGameReadyJump()
  437. end
  438. end
  439. --跳一跳摔倒处理
  440. function JumpOneModel:JumpOneJumpDownHandle(role_id)
  441. local role = Scene.Instance:GetRole(role_id)
  442. if role then
  443. role:DoGameDownJump()
  444. end
  445. end
  446. --跳一跳更新玩家信息
  447. function JumpOneModel:UpdateMemberInfo(vo)
  448. local role_list = self:GetGameMemberInfo()
  449. if role_list and #role_list > 0 then
  450. for k,v in pairs(role_list) do
  451. if v.role_id == vo.role_id then
  452. v.life = vo.life
  453. if v.life == 0 then
  454. v.player_state = JumpOneModel.PLAYER_STATE.GAME_OUT
  455. end
  456. self:Fire(JumpOneModel.JUMP_UPDATE_MEMBER_INFO)
  457. break
  458. end
  459. end
  460. end
  461. end
  462. --跳一跳更新玩家信息
  463. function JumpOneModel:GetGameMemberInfo()
  464. local list = {}
  465. if self.game_info and self.game_info.game_info then
  466. list = self.game_info.game_info.role_list
  467. end
  468. return list
  469. end
  470. --跳一跳更新玩家信息
  471. function JumpOneModel:GetGameMyInfo()
  472. local role_list = self:GetGameMemberInfo()
  473. if role_list and #role_list > 0 then
  474. for k,v in pairs(role_list) do
  475. if v.role_id == RoleManager.Instance.mainRoleInfo.role_id then
  476. return v
  477. end
  478. end
  479. end
  480. end
  481. --跳一跳更新玩家信息
  482. function JumpOneModel:UpdateMemberDir(target_x, target_y)
  483. local role_list = self:GetGameMemberInfo()
  484. local dir2 = Vector2.New(0, 1)
  485. if not role_list or #role_list == 0 then
  486. return
  487. end
  488. for i,v in ipairs(role_list) do
  489. local role = Scene.Instance:GetRole(v.role_id)
  490. if role then
  491. local pos_x, pos_y = role:GetRealPos()
  492. local dir1 = Vector2.New(target_x - pos_x , target_y - pos_y )
  493. dir1 = dir1:Normalize()
  494. local rotate_y = Vector2.Angle(dir1, dir2)
  495. role:SetDirection(Vector2.New(pos_x, pos_y), Vector2.New(target_x, target_y), true)
  496. end
  497. end
  498. end
  499. --跳一跳检测跳跃成功还是失败
  500. function JumpOneModel:CheckJumpResult(role, jump_time, target_x, target_y)
  501. if role then
  502. local cur_jump_info = self:GetCurJumpInfo()
  503. local last_step_info = self:GetLastStepInfo()
  504. local step_radius = last_step_info.radius / 100 / 2 + 1
  505. local dist = role:GetGameJumpDistanceAndSpeed(jump_time)
  506. local dir = role.direction
  507. local end_pos = co.TableXY(role.real_pos.x + dir.x * dist, role.real_pos.y + dir.y * dist)
  508. local pos_1_x = end_pos.x / MainCamera.PixelsToUnits
  509. local pos_1_y = end_pos.y / MainCamera.PixelsToUnits
  510. local pos_2_x = target_x / MainCamera.PixelsToUnits
  511. local pos_2_y = target_y / MainCamera.PixelsToUnits
  512. local length = GameMath_GetDistance(pos_1_x, pos_1_y, pos_2_x, pos_2_y, false)
  513. print('Cat:JumpOneModel.lua[539] cur pos ', pos_1_x, pos_1_y, pos_2_x, pos_2_y)
  514. print('Cat:JumpOneModel.lua[332] length', length, step_radius, length <= step_radius)
  515. return length <= step_radius
  516. end
  517. return false
  518. end
  519. --跳一跳获取当前跳跃的信息
  520. function JumpOneModel:GetCurJumpInfo()
  521. local cur_jump_info = self.game_info.game_info and self.game_info.game_info.cur_jump_info or false
  522. return cur_jump_info
  523. end
  524. --跳一跳获取最新一个跳台的信息
  525. function JumpOneModel:GetLastStepInfo()
  526. local step_info
  527. if self.game_info.game_info and self.game_info.game_info.step_list then
  528. local list = self.game_info.game_info.step_list
  529. step_info = list[#list]
  530. end
  531. return step_info
  532. end
  533. --跳一跳清除所有跳台
  534. function JumpOneModel:ClearAllStep()
  535. local step_list = self.game_info.game_info and self.game_info.game_info.step_list or false
  536. if step_list and #step_list > 0 then
  537. for k,v in pairs(step_list) do
  538. Scene.Instance:DeleteJumpOneStep(v.step_id)
  539. end
  540. end
  541. end
  542. --跳一跳内部切场景
  543. function JumpOneModel:SyncGameScene(vo)
  544. self.game_info.is_sync_pos = vo
  545. local main_role = Scene.Instance.main_role
  546. if main_role and vo then
  547. main_role:SetRealPos(vo.x, vo.y)
  548. GlobalEventSystem:Fire(SceneEventType.MOVEREQUEST, vo.x, vo.y, MOVE_TYPE.BLINK)
  549. end
  550. end
  551. --跳一跳更新玩家的显示状态
  552. function JumpOneModel:UpdateMemberVisible()
  553. local show_role_id = false
  554. local game_state = self:GetGameState()
  555. if game_state == JumpOneModel.GAME_STATE.GAME and not self.is_quit_game then
  556. local cur_jump_info = self:GetCurJumpInfo()
  557. show_role_id = cur_jump_info.role_id ~= 0 and cur_jump_info.role_id or RoleManager.Instance.mainRoleInfo.role_id
  558. else
  559. show_role_id = RoleManager.Instance.mainRoleInfo.role_id
  560. end
  561. local role_list = self:GetGameMemberInfo()
  562. if role_list and #role_list > 0 then
  563. for k,v in pairs(role_list) do
  564. local role = Scene.Instance:GetRole(v.role_id)
  565. if role then
  566. role:SetModelHideFlag(SceneObj.ModelHideFlag.Story, v.role_id ~= show_role_id)
  567. end
  568. end
  569. end
  570. end
  571. --跳一跳获取游戏状态
  572. function JumpOneModel:GetGameState()
  573. local game_state = self.game_info and self.game_info.game_state or JumpOneModel.GAME_STATE.WAIT
  574. return game_state
  575. end
  576. --跳一跳当前跳跃按下的状态
  577. function JumpOneModel:GetJumpTouchState()
  578. return self.game_info.game_info and self.game_info.game_info.jump_touch_state and self.game_info.game_info.jump_touch_state or JumpOneModel.JUMP_TOUCH_STATE.NONE
  579. end
  580. --跳一跳当前跳跃按下的状态
  581. function JumpOneModel:SetJumpTouchState(state)
  582. self.game_info.game_info = self.game_info.game_info or {}
  583. self.game_info.game_info.jump_touch_state = state
  584. end
  585. --跳一跳离线更新
  586. function JumpOneModel:SetOffLinePlayer(vo)
  587. self.game_info.off_line_info = self.game_info.off_line_info or {}
  588. self.game_info.off_line_info[vo.role_id] = vo
  589. local role_list = self:GetGameMemberInfo()
  590. if role_list and #role_list > 0 then
  591. for i,v in ipairs(role_list) do
  592. if v.role_id == vo.role_id then
  593. if v.life ~= 0 then
  594. v.player_state = JumpOneModel.PLAYER_STATE.OFF_LINE
  595. end
  596. break
  597. end
  598. end
  599. end
  600. PrintTable(self.game_info.off_line_info)
  601. self:Fire(JumpOneModel.JUMP_OFF_LINE_UPDATE)
  602. end
  603. --跳一跳上线更新
  604. function JumpOneModel:SetOnLinePlayer(vo)
  605. local role_list = self:GetGameMemberInfo()
  606. if role_list and #role_list > 0 then
  607. for i,v in ipairs(role_list) do
  608. if v.role_id == vo.role_id then
  609. if v.life ~= 0 then
  610. v.player_state = JumpOneModel.PLAYER_STATE.ON_LINE
  611. end
  612. break
  613. end
  614. end
  615. end
  616. --玩家上线时,同步一次这个玩家的状态
  617. local main_role = Scene.Instance.main_role
  618. if main_role then
  619. local pos_x, pos_y = main_role:GetRealPos()
  620. self:SyncTargetRolePos(pos_x, pos_y, vo.role_id)
  621. end
  622. self:UpdateMemberVisible()
  623. local last_step_info = self:GetLastStepInfo()
  624. if last_step_info then
  625. self:UpdateMemberDir(last_step_info.x, last_step_info.y)
  626. end
  627. self:Fire(JumpOneModel.JUMP_ON_LINE_UPDATE)
  628. end
  629. --跳一跳获取当前跳跃者的role_id
  630. function JumpOneModel:GetCurjumperRoleId()
  631. local cur_jump_info = self:GetCurJumpInfo()
  632. local role_id = cur_jump_info and cur_jump_info.role_id or -1
  633. return role_id
  634. end
  635. --跳一跳获取当前跳跃者的role_id
  636. function JumpOneModel:GetPlayerStateByRoleId(role_id)
  637. local player_state = JumpOneModel.PLAYER_STATE.ON_LINE
  638. local member_list = self:GetGameMemberInfo()
  639. if member_list and #member_list > 0 then
  640. for i,v in ipairs(member_list) do
  641. if v.role_id == role_id then
  642. player_state = v.player_state
  643. end
  644. end
  645. end
  646. return player_state
  647. end
  648. --跳一跳获取跳跃者的信息
  649. function JumpOneModel:GetPlayerInfoRoleId(role_id)
  650. local member_list = self:GetGameMemberInfo()
  651. if member_list and #member_list > 0 then
  652. for i,v in ipairs(member_list) do
  653. if v.role_id == role_id then
  654. return v
  655. end
  656. end
  657. end
  658. end
  659. --跳一跳获取玩家的命数
  660. function JumpOneModel:GetPlayerLife(role_id)
  661. local life_cnt = 0
  662. local member_list = self:GetGameMemberInfo()
  663. if member_list and #member_list > 0 then
  664. for i,v in ipairs(member_list) do
  665. if v.role_id == role_id then
  666. life_cnt = v.life
  667. end
  668. end
  669. end
  670. return life_cnt
  671. end
  672. --跳一跳设置结算界面
  673. function JumpOneModel:SetResultInfo(vo)
  674. self.result_info = vo
  675. self:Fire(JumpOneModel.JUMP_GAME_RESULT_NOTIFY)
  676. end
  677. --跳一跳游戏结束
  678. function JumpOneModel:SetGameEnd(vo)
  679. self.game_info.game_state = JumpOneModel.GAME_STATE.END
  680. local time = vo.end_time - TimeUtil:getServerTime( )
  681. self:Fire(JumpOneModel.JUMP_GAME_END_NOTIFY, time)
  682. end
  683. --跳一跳获取最少匹配时间
  684. function JumpOneModel:GetMinMatchTime()
  685. local time = 0
  686. local cfg = Config.Jumpactkv
  687. if cfg and cfg["jump_wait"] then
  688. time = cfg["jump_wait"].value_content
  689. end
  690. return time
  691. end
  692. --跳一跳获取最少匹配人数
  693. function JumpOneModel:GetMinMatchNum()
  694. local num = 0
  695. local cfg = Config.Jumpactkv
  696. if cfg and cfg["jump_min_num"] then
  697. num = cfg["jump_min_num"].value_content
  698. end
  699. return num
  700. end
  701. --跳跃最大蓄力时间
  702. function JumpOneModel:GetJumpMaxTouchTime()
  703. if not self.jump_max_touch_time then
  704. local cfg = Config.Jumpactkv
  705. if cfg and cfg["jump_max_second"] then
  706. self.jump_max_touch_time = cfg["jump_max_second"].value_content
  707. self.jump_max_touch_time = self.jump_max_touch_time * 1000
  708. else
  709. self.jump_max_touch_time = 4000
  710. end
  711. end
  712. return self.jump_max_touch_time
  713. end
  714. --跳一跳最大跳跃操作时间
  715. function JumpOneModel:GetMaxJumpTime()
  716. if not self.max_jump_time then
  717. local cfg = Config.Jumpactkv
  718. if cfg and cfg["jump_time"] then
  719. self.max_jump_time = cfg["jump_time"].value_content
  720. else
  721. time = 15
  722. end
  723. end
  724. return self.max_jump_time
  725. end
  726. --获取角色的vo信息,用于不在线的玩家
  727. function JumpOneModel:GetRoleVoByRoleId(role_id)
  728. local role_list = self:GetGameMemberInfo()
  729. local role_vo
  730. if role_list and #role_list > 0 then
  731. for i,v in ipairs(role_list) do
  732. if v.role_id == role_id then
  733. role_vo = v
  734. end
  735. end
  736. end
  737. return role_vo
  738. end
  739. --获取匹配开始时间
  740. function JumpOneModel:GetMatchReadTime()
  741. local time = 0
  742. if self.view_info.match_members and self.view_info.match_members.begin_time ~= 0 then
  743. time = self.view_info.match_members.begin_time - TimeUtil:getServerTime()
  744. end
  745. return time
  746. end
  747. --获取活动奖励
  748. function JumpOneModel:GetlRewardList(base_type, sub_type)
  749. if not self.reward_info or not self.reward_info[base_type] or not self.reward_info[base_type][sub_type] then
  750. self.reward_info = self.reward_info or {}
  751. local act_info = CustomActivityModel:getInstance():getOneActRewardList(base_type, sub_type)
  752. if act_info then
  753. local list = {}
  754. for i=#act_info.reward_list,1,-1 do
  755. local t = stringtotable(act_info.reward_list[i].reward)
  756. table.insert(list, t[1])
  757. end
  758. self.reward_info = self.reward_info or {}
  759. self.reward_info[base_type] = self.reward_info[base_type] or {}
  760. self.reward_info[base_type][sub_type] = list
  761. end
  762. end
  763. return self.reward_info and self.reward_info[base_type] and self.reward_info[base_type][sub_type] or {}
  764. end
  765. --获取活动开放
  766. function JumpOneModel:GetOpenTime(open_time_table, last_time_table)
  767. local str = ""
  768. if not open_time_table or not last_time_table or open_time_table == 0 or #last_time_table == 0 then return end
  769. for i=1,#open_time_table do
  770. if str ~= "" then
  771. str = str .. "\n"
  772. end
  773. local start_str = self:TimeTable2String(open_time_table[i])
  774. local end_time_table =
  775. {
  776. [1] = tonumber(open_time_table[i][1]) + math.floor(tonumber(last_time_table[2]) / 3600),
  777. [2] = tonumber(open_time_table[i][2]) + math.floor(tonumber(last_time_table[2]) % 3600),
  778. }
  779. local end_str = self:TimeTable2String(end_time_table)
  780. local s = string.format("第%s场 %s ~%s", WordManager:getHanZiNumber(i), start_str, end_str)
  781. str = str .. s
  782. end
  783. return str
  784. end
  785. --解析时间table
  786. function JumpOneModel:TimeTable2String(time_table)
  787. local str = ""
  788. if time_table and time_table[1] and time_table[2] then
  789. local h_s = tonumber(time_table[1]) > 10 and tostring(time_table[1]) or ("0" .. tostring(time_table[1]))
  790. local m_s = tonumber(time_table[2]) > 10 and tostring(time_table[2]) or ("0" .. tostring(time_table[2]))
  791. str = h_s .. ":" .. m_s
  792. end
  793. return str
  794. end
  795. --跳跃结束延时协议操作
  796. function JumpOneModel:SyncJumpEndScmd()
  797. local delay_func = function ()
  798. local sub_type = self:GetActSubType()
  799. self:Fire(JumpOneModel.REQUEST_INFO, 45909, self:GetRoomId(), 2, sub_type)
  800. end
  801. setTimeout(delay_func,0.5)
  802. end
  803. --获取当前活动的场次(客户端这里只会存在一场))
  804. function JumpOneModel:GetActSubType()
  805. local sub_type = 0
  806. if self.act_cfg then
  807. for k,v in pairs(self.act_cfg) do
  808. sub_type = k
  809. break
  810. end
  811. end
  812. return sub_type
  813. end