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

388 行
12 KiB

  1. GuideSpiritView = GuideSpiritView or BaseClass(BaseView)
  2. local GuideSpiritView = GuideSpiritView
  3. GuideSpiritView.MaxTaskNum = 3
  4. function GuideSpiritView:__init()
  5. self.base_file = "guide"
  6. self.layout_file = "GuideSpiritView"
  7. self.layer_name = "Activity"
  8. self.destroy_imm = true
  9. self.use_background = true
  10. self.task_item_list = {}
  11. self.is_set_zdepth = true
  12. self.is_guide_module = true
  13. -- self.use_local_view = true
  14. self.isPlay = true
  15. self.finish_all = false
  16. self.load_callback = function ()
  17. self:LoadSuccess()
  18. self:InitEvent()
  19. end
  20. self.open_callback = function ()
  21. end
  22. self.close_callback = function ()
  23. self:Remove()
  24. if self.finish_all then
  25. GlobalEventSystem:Fire(EventName.TEST_HELP_STEP, 999991011)
  26. elseif self.need_do_task then
  27. GuideModel:getInstance():BeginTask(self.layout_file)
  28. end
  29. end
  30. end
  31. function GuideSpiritView:LoadSuccess()
  32. self.leaveTime,
  33. self.desc_txt,
  34. self.explain_txt = self:GetChildTexts({
  35. "InfoCon/CloseBtn/Text",
  36. "InfoCon/Desc/Text",
  37. "InfoCon/UICon/BG3/Text"
  38. })
  39. self.background,
  40. self.bg1,
  41. self.bg2,
  42. self.bg3 = self:GetChildImages ({
  43. "BG",
  44. "InfoCon/BG1",
  45. "InfoCon/BG2",
  46. "InfoCon/UICon/BG3",
  47. })
  48. self.closeBtn,
  49. self.ModelBtn,
  50. self.SureBtn,
  51. self.DescCon,
  52. self.ContinueBtn = self:GetChildGameObjects({
  53. "InfoCon/CloseBtn",
  54. "InfoCon/UICon/ModelBtn",
  55. "InfoCon/SureBtn",
  56. "InfoCon/Desc",
  57. "InfoCon/UICon/ContinueBtn"
  58. })
  59. self.con,
  60. self.UICon,
  61. self.SpiritCon,
  62. self.BgEffectCon,
  63. self.EffectCon,
  64. self.mask = self:GetChildTransforms({
  65. "InfoCon/Con",
  66. "InfoCon/UICon",
  67. "InfoCon/SpiritCon",
  68. "InfoCon/BgEffectCon",
  69. "InfoCon/UICon/EffectCon",
  70. "Mask"
  71. })
  72. lua_resM:setOutsideImageSprite(self,self.background,GameResPath.GetJpgImage("bag_bg.jpg"),false)
  73. lua_resM:setOutsideImageSprite(self,self.bg1,GameResPath.GetGuideImage("hxui_bg"),false)
  74. lua_resM:setOutsideImageSprite(self,self.bg2,GameResPath.GetGuideImage("hxui_msz"),false)
  75. lua_resM:setOutsideImageSprite(self,self.bg3,GameResPath.GetGuideImage("hxui_qp"),false)
  76. self.mask.sizeDelta = Vector2(ScreenWidth,ScreenHeight)
  77. self.closeBtn.transform.anchoredPosition = Vector2(ScreenWidth / 2 - 50,ScreenHeight / 2 - 50)
  78. local function generateItem(i)
  79. local item = {
  80. gameObject = self:GetChild("InfoCon/Grid/title"..i).gameObject,
  81. task_name_txt = self:GetChild("InfoCon/Grid/title"..i.."/Text"):GetComponent("Text"),
  82. finish_flag_img = self:GetChild("InfoCon/Grid/title"..i.."/Sign"):GetComponent("Image"),
  83. }
  84. return item
  85. end
  86. for i = 1,3 do
  87. table.insert(self.task_item_list,generateItem(i))
  88. end
  89. self:InitView()
  90. local function load_callback()
  91. self:SetSpiritModel()
  92. self:SetUIDepth(self.UICon.gameObject)
  93. end
  94. local data = {
  95. clothe_res_id = GuideModel.SpiritBgId,
  96. type = SceneBaseType.StarSoul,
  97. layer_name = self.layer_name,
  98. rotate = Vector3(-15,0,0),
  99. action_name_list = {"idle"},
  100. can_rotate = false,
  101. scale = 150,
  102. position = Vector3(0, -156, 0),
  103. callBack = load_callback,
  104. layout_file = self.layout_file
  105. }
  106. lua_resM:SetRoleModel(self, self.con,data)
  107. end
  108. function GuideSpiritView:InitView()
  109. local finish_num = 0
  110. local last_finish_task_id = TaskModel:getInstance().last_finish_task_id
  111. local list = Config.ConfigHelper.StarTaskList
  112. for index,id in ipairs(list) do
  113. if id > last_finish_task_id then
  114. lua_resM:setImageSprite(self, self.task_item_list[index].finish_flag_img, "common_asset", "tyui_wdc",true)
  115. else
  116. finish_num = finish_num + 1
  117. lua_resM:setImageSprite(self, self.task_item_list[index].finish_flag_img, "common_asset", "tyui_ywc",true)
  118. end
  119. local basedata=ConfigItemMgr.Instance:GetTaskData(id)
  120. if basedata then
  121. self.task_item_list[index].task_name_txt.text = Trim("Lv."..basedata.level..basedata.name)
  122. end
  123. end
  124. if finish_num >= GuideSpiritView.MaxTaskNum then
  125. self.finish_all = true
  126. end
  127. if self.finish_all then
  128. self.SureBtn:SetActive(false)
  129. self.DescCon:SetActive(false)
  130. self.ContinueBtn:SetActive(false)
  131. self.explain_txt.text = "萌羊座被你唤醒了!让她与你并肩作战吧!"
  132. self.bg3.transform.localPosition = Vector3(-43,-174,0)
  133. GlobalEventSystem:Fire(EventName.STOP_AUTO_DO_TASK)
  134. GlobalEventSystem:Fire(EventName.STOPAUTOFIGHT)
  135. else
  136. self.SureBtn:SetActive(false)
  137. self.DescCon:SetActive(true)
  138. self.ContinueBtn:SetActive(true)
  139. self.explain_txt.text = "萌羊座似乎还能感知你的存在,点击试试看吧"
  140. self.desc_txt.text = string.format("完成主线任务:%d/%d",finish_num,GuideSpiritView.MaxTaskNum)
  141. end
  142. end
  143. function GuideSpiritView:SetSpiritModel()
  144. local function load_callback()
  145. if self.curr_Model == nil then
  146. self.curr_Model = lua_resM:GetPartModel(self, self.con)
  147. self.animator = self.curr_Model.gameObject:GetComponent("Animator")
  148. end
  149. if self.curr_Model then
  150. self.spirit_root = self.curr_Model.transform:Find("Bone001")
  151. if self.spirit_root then
  152. local function load_finish_func(go)
  153. if go then
  154. self.BGEffect = go.transform
  155. self:SetUILayer(go.transform)
  156. go.transform.localPosition = Vector3(-0.046,1.459,-0.036)
  157. go.transform.localScale = Vector3.one
  158. go.transform.localRotation = Quaternion.Euler(Vector3.zero)
  159. end
  160. self:SetUIDepth(self.UICon.gameObject)
  161. end
  162. local function load_finish(go)
  163. if go then
  164. self:SetUILayer(go.transform)
  165. go.transform.localPosition = Vector3(-0.046,1.459,-0.036)
  166. go.transform.localScale = Vector3.one
  167. go.transform.localRotation = Quaternion.Euler(Vector3.zero)
  168. end
  169. self:SetUIDepth(self.UICon.gameObject)
  170. self:AddUIEffect("ui_partnersys_bkgd",self.curr_Model.transform,self.layer_name, nil, -1, false, -1, nil, nil, load_finish_func, nil, nil, true)
  171. end
  172. self:AddUIEffect("ui_partnersys_platformfx",self.curr_Model.transform,self.layer_name, nil, -1, false, -1, nil, nil, load_finish, nil, nil, true)
  173. self.SpiritCon:SetParent(self.spirit_root.transform)
  174. end
  175. if self.finish_all then
  176. local onTimer = function ()
  177. if self._use_delete_method then
  178. return
  179. end
  180. self:CancelDelayTimer()
  181. self:ShowActiveAnim()
  182. end
  183. self.delay_timer_id = TimerQuest.AddDelayQuest(GlobalTimerQuest, onTimer,0.5)
  184. end
  185. end
  186. end
  187. local data = {
  188. clothe_res_id = GuideModel.SpiritId,
  189. type = SceneBaseType.StarSoul,
  190. layer_name = self.layer_name,
  191. rotate = Vector3(0,180,0),
  192. action_name_list = {"idle2"},
  193. can_rotate = false,
  194. scale = 1,
  195. position = Vector3(2.1, -92.2, 0),
  196. callBack = load_callback,
  197. layout_file = self.layout_file
  198. }
  199. lua_resM:SetRoleModel(self,self.SpiritCon.transform,data)
  200. end
  201. function GuideSpiritView:CancelDelayTimer()
  202. if self.delay_timer_id then
  203. TimerQuest.CancelQuest(GlobalTimerQuest, self.delay_timer_id)
  204. self.delay_timer_id = nil
  205. end
  206. end
  207. function GuideSpiritView:InitEvent()
  208. local function clickFunc(target)
  209. if target == self.closeBtn then
  210. self:Close()
  211. elseif target == self.SureBtn then
  212. self:ShowActiveAnim()
  213. elseif target == self.ModelBtn then
  214. if self.finish_all then
  215. return
  216. end
  217. if self.curr_Model == nil then
  218. self.curr_Model = lua_resM:GetPartModel(self, self.con)
  219. self.animator = self.curr_Model.gameObject:GetComponent("Animator")
  220. end
  221. if self.animator then
  222. self.animator.speed = 1
  223. self.animator:Update(0)
  224. self.animator:CrossFade("shake1",0.1, 0)
  225. if not self.isPlay then return end
  226. local cur_state = self.animator:GetCurrentAnimatorStateInfo(0)
  227. if cur_state then
  228. local action_time = cur_state.length
  229. self.isPlay = false
  230. self.model_timer_1 = setTimeout(function()
  231. if self.animator then
  232. self.isPlay = true
  233. self.animator:CrossFade("idle",0.1,0)
  234. end
  235. end,action_time)
  236. end
  237. end
  238. elseif target == self.ContinueBtn then
  239. self:BtnCall()
  240. end
  241. end
  242. AddClickEvent(self.closeBtn,clickFunc )
  243. AddClickEvent(self.ModelBtn,clickFunc,LuaSoundManager.SOUND_UI.SWITCH)
  244. AddClickEvent(self.SureBtn,clickFunc,LuaSoundManager.SOUND_UI.SWITCH)
  245. AddClickEvent(self.ContinueBtn,clickFunc,LuaSoundManager.SOUND_UI.SWITCH)
  246. end
  247. function GuideSpiritView:StartLeaveTimer( time )
  248. local onUpdate = function ( )
  249. time = time - 1
  250. if time<=0 then
  251. self.leaveTime.text = ""
  252. self:CancelLeaveTimer()
  253. self:Close()
  254. return
  255. end
  256. self.leaveTime.text = time.."s后自动关闭"
  257. end
  258. self.leaveTime.text = ""
  259. if not self.leave_timer_id then
  260. self.leaveTime.text = time.."s后自动关闭"
  261. self.leave_timer_id = GlobalTimerQuest:AddPeriodQuest(onUpdate, 1, -1)
  262. end
  263. onUpdate()
  264. end
  265. function GuideSpiritView:CancelLeaveTimer( )
  266. if self.leave_timer_id then
  267. GlobalTimerQuest:CancelQuest(self.leave_timer_id)
  268. self.leave_timer_id = nil
  269. end
  270. end
  271. function GuideSpiritView:Remove()
  272. if self.event_id then
  273. self.model:UnBind(self.event_id)
  274. end
  275. self:CancelLeaveTimer()
  276. self:CancelDelayTimer()
  277. if self.model_timer_1 then
  278. TimerQuest.CancelQuest(GlobalTimerQuest, self.model_timer_1)
  279. self.model_timer_1 = nil
  280. end
  281. if self.model_timer_2 then
  282. TimerQuest.CancelQuest(GlobalTimerQuest, self.model_timer_2)
  283. self.model_timer_2 = nil
  284. end
  285. if self.model_timer_3 then
  286. TimerQuest.CancelQuest(GlobalTimerQuest, self.model_timer_3)
  287. self.model_timer_3 = nil
  288. end
  289. end
  290. function GuideSpiritView:ShowActiveAnim()
  291. if self.curr_Model == nil then
  292. self.curr_Model = lua_resM:GetPartModel(self, self.con)
  293. self.animator = self.curr_Model.gameObject:GetComponent("Animator")
  294. end
  295. if self.animator then
  296. self.animator.speed = 1
  297. self.animator:Update(0)
  298. self.animator:CrossFade("shake",0.1, 0)
  299. if self.spirit_root == nil then
  300. self.spirit_root = self.curr_Model.transform:Find("Bone001")
  301. end
  302. if self.spirit_root then
  303. local function load_finish_func(go)
  304. if go then
  305. self:SetUILayer(go.transform)
  306. go.transform.localPosition = Vector3(0,0,0)
  307. go.transform.localScale = Vector3.one
  308. go.transform.localRotation = Quaternion.Euler(Vector3.zero)
  309. end
  310. end
  311. self:AddUIEffect("ui_partnersys_touchhot",self.spirit_root.transform,self.layer_name, nil, -1, false, -1, nil, nil, load_finish_func, nil, nil, true)
  312. end
  313. local cur_state = self.animator:GetCurrentAnimatorStateInfo(0)
  314. if cur_state then
  315. local action_time = cur_state.length
  316. self.model_timer_2 = setTimeout(function()
  317. self.SpiritCon:SetParent(self.con.transform)
  318. SetLocalRotation(self.SpiritCon)
  319. SetAnchoredPosition(self.SpiritCon,0,132)
  320. if self.BGEffect then
  321. self.BGEffect:SetParent(self.con.transform)
  322. end
  323. self.curr_Model.gameObject:SetActive(false)
  324. local spirit_Model = lua_resM:GetPartModel(self, self.SpiritCon)
  325. if spirit_Model then
  326. spirit_Model.transform.localRotation = Vector3(0,180,0)
  327. local spirit_animator = spirit_Model.gameObject:GetComponent("Animator")
  328. spirit_animator.speed = 1
  329. spirit_animator:Update(0)
  330. spirit_Model:PlayActions({"casual","idle"})
  331. end
  332. self:AddUIEffect("ui_partnersys_breakout", self.EffectCon, self.layer_name, nil, {x=1,y=1,z=1}, true, nil, nil, nil, call_fun)
  333. self.model_timer_3 = setTimeout(function ( )
  334. self.EffectCon.gameObject:SetActive(false)
  335. self:StartLeaveTimer(5)
  336. end,0.5)
  337. end,action_time)
  338. end
  339. end
  340. end
  341. function GuideSpiritView:BtnCall()
  342. self:Close()
  343. setTimeout(function ()
  344. GlobalEventSystem:Fire(EventName.FORCE_TO_DO_TASK, true)
  345. end,0.2)
  346. end