UICreateRoleView.lua 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340
  1. local UICreateRoleView = require("UICreateRole/UICreateRoleView_Generate")
  2. local RoleViewSystem = require("RoleViewSystem")
  3. local PreviewSystem = require("PreviewSystem")
  4. local MirrorPreviewSystem = require("MirrorPreviewSystem")
  5. local SelectType = {
  6. HairAndColor = 1,
  7. EyeColor = 2,
  8. Headwear = 3,
  9. }
  10. local curSelectType = SelectType.HairAndColor
  11. local roleViewSystem = nil
  12. local previewSystem = nil
  13. local mirrorPreviewSystem = nil
  14. local cancelToggleTigger = false
  15. function UICreateRoleView:OnAwake(data)
  16. self.controller = require("UICreateRole/UICreateRoleCtr"):new()
  17. self.controller:Init(self)
  18. self.controller:SetData(data)
  19. end
  20. function UICreateRoleView:AddEventListener()
  21. ManagerContainer.LuaEventMgr:RegisterUIEvent(self.uiData.name, UIEventNames.ENTER_BATTLE, function()
  22. -- ManagerContainer.LuaGameMgr:EnterBattle()
  23. -- 创建名字流程(临时使用,未来需要根据需求变更)
  24. -- self.controller:CreateNickName()
  25. end)
  26. -- ManagerContainer.LuaEventMgr:RegisterUIEvent(self.uiData.name, UIEventNames.NICK_NAME_CREATED, function()
  27. -- ManagerContainer.LuaGameMgr:EnterBattle()
  28. -- end)
  29. end
  30. function UICreateRoleView:FillContent(data, uiBase)
  31. self.uiBase = uiBase
  32. local gameObject = self.uiBase:GetRoot()
  33. if gameObject ~= nil then
  34. self.gameObject = gameObject
  35. self.transform = gameObject.transform
  36. end
  37. self:InitGenerate(self.transform, data)
  38. self:Init()
  39. end
  40. function UICreateRoleView:Init()
  41. --暂时设置
  42. local ls = self.controller:GetCanSelectHairColors()
  43. self.color1.background.image.color = ls[1]
  44. self.color2.background.image.color = ls[2]
  45. self.color3.background.image.color = ls[3]
  46. self.color4.background.image.color = ls[4]
  47. self.color5.background.image.color = ls[5]
  48. self.color6.background.image.color = ls[6]
  49. self.color7.background.image.color = ls[7]
  50. if not roleViewSystem then
  51. roleViewSystem = RoleViewSystem:new()
  52. end
  53. if not previewSystem then
  54. previewSystem = PreviewSystem:new("Preview")
  55. previewSystem:SetView(Vector3(-0.116, 1.649, 2.5), Quaternion.Euler(12.174, -182.628, 0.085))
  56. end
  57. if not mirrorPreviewSystem then
  58. mirrorPreviewSystem = MirrorPreviewSystem:new("MirrorPreview", previewSystem:GetCamera())
  59. end
  60. self.model:SetActive(true)
  61. self.model.rawImage.texture = previewSystem:GetRenderTexture()
  62. self.mirrorModel:SetActive(true)
  63. self.mirrorModel.rawImage.texture = mirrorPreviewSystem:GetRenderTexture()
  64. self:_RefreshShowModel()
  65. -- 加载阴影
  66. local shadowAssetName = Constants.EffectPath .. "/Common/FX_Yinying"
  67. self.seqId = ManagerContainer.ResMgr:LuaLoadAssets(Enum.ResourceType.GameObject, nil, {shadowAssetName}, nil, function()
  68. if ManagerContainer.ResMgr:SeqIdEquals(self.seqId, 0) then
  69. self.seqId = nil
  70. end
  71. self.shadowGo = ManagerContainer.ResMgr:GetGoFromPool(nil, shadowAssetName)
  72. if previewSystem then
  73. previewSystem:AddGo(self.shadowGo)
  74. end
  75. if mirrorPreviewSystem then
  76. mirrorPreviewSystem:AddGo(self.shadowGo)
  77. end
  78. end)
  79. end
  80. function UICreateRoleView:RemoveEventListener()
  81. ManagerContainer.LuaEventMgr:Unregister(self.uiData.name)
  82. end
  83. function UICreateRoleView:AddUIEventListener()
  84. ManagerContainer.LuaEventMgr:RegisterUIEvent(self.uiData.name)
  85. self.uiBase:AddToggleEventListener(self.boy.toggle, self, self.ChangeSex, Enum.SexType.Man)
  86. self.uiBase:AddToggleEventListener(self.girl.toggle, self, self.ChangeSex, Enum.SexType.Woman)
  87. self.uiBase:AddToggleEventListener(self.hairAndColor.toggle, self, self.ChangeSelectType, SelectType.HairAndColor)
  88. self.uiBase:AddToggleEventListener(self.eyeColor.toggle, self, self.ChangeSelectType, SelectType.EyeColor)
  89. self.uiBase:AddToggleEventListener(self.headwear.toggle, self, self.ChangeSelectType, SelectType.Headwear)
  90. self.uiBase:AddToggleEventListener(self.hair1.toggle, self, self.ChangeHair, 1)
  91. self.uiBase:AddToggleEventListener(self.hair2.toggle, self, self.ChangeHair, 2)
  92. self.uiBase:AddToggleEventListener(self.hair3.toggle, self, self.ChangeHair, 3)
  93. self.uiBase:AddToggleEventListener(self.hair4.toggle, self, self.ChangeHair, 4)
  94. self.uiBase:AddToggleEventListener(self.color1.toggle, self, self.ChangeHairColor, 1)
  95. self.uiBase:AddToggleEventListener(self.color2.toggle, self, self.ChangeHairColor, 2)
  96. self.uiBase:AddToggleEventListener(self.color3.toggle, self, self.ChangeHairColor, 3)
  97. self.uiBase:AddToggleEventListener(self.color4.toggle, self, self.ChangeHairColor, 4)
  98. self.uiBase:AddToggleEventListener(self.color5.toggle, self, self.ChangeHairColor, 5)
  99. self.uiBase:AddToggleEventListener(self.color6.toggle, self, self.ChangeHairColor, 6)
  100. self.uiBase:AddToggleEventListener(self.color7.toggle, self, self.ChangeHairColor, 7)
  101. self.uiBase:AddToggleEventListener(self.eyesColor1.toggle, self, self.ChangeEye, 1)
  102. self.uiBase:AddToggleEventListener(self.eyesColor2.toggle, self, self.ChangeEye, 2)
  103. self.uiBase:AddToggleEventListener(self.eyesColor3.toggle, self, self.ChangeEye, 3)
  104. self.uiBase:AddToggleEventListener(self.eyesColor4.toggle, self, self.ChangeEye, 4)
  105. self.uiBase:AddToggleEventListener(self.headwear1.toggle, self, self.ChangeHeadwear, 1)
  106. self.uiBase:AddToggleEventListener(self.headwear2.toggle, self, self.ChangeHeadwear, 2)
  107. self.uiBase:AddToggleEventListener(self.headwear3.toggle, self, self.ChangeHeadwear, 3)
  108. self.uiBase:AddButtonEventListener(self.btnLetsGo.button, self, self.OnClickStartGame)
  109. self.uiBase:AddButtonEventListener(self.btnBack.button, self, self.OnClickBack)
  110. self.model.uIEventTriggerListener.onDrag = function()
  111. local deltaX = self.model.uIEventTriggerListener.currentEventData.delta.x
  112. if roleViewSystem then
  113. local go = roleViewSystem:GetGameObject()
  114. if go then
  115. go.transform:Rotate(Vector3.New(0, deltaX > 0 and -7 or 7, 0))
  116. end
  117. end
  118. end
  119. end
  120. function UICreateRoleView:OnHide()
  121. end
  122. function UICreateRoleView:OnShow(data)
  123. self.controller:SetData(data)
  124. self:Init()
  125. end
  126. function UICreateRoleView:OnClose()
  127. end
  128. function UICreateRoleView:OnDispose()
  129. self.model.uIEventTriggerListener.onDrag = nil
  130. if self.seqId then
  131. ManagerContainer.ResMgr:UnloadAssetBySeqId(self.seqId)
  132. end
  133. self.seqId = nil
  134. if self.shadowGo then
  135. local shadowAssetName = Constants.EffectPath .. "/Common/FX_Yinying"
  136. ManagerContainer.ResMgr:RecycleGO(nil, shadowAssetName, self.shadowGo)
  137. end
  138. self.shadowGo = nil
  139. if mirrorPreviewSystem then
  140. mirrorPreviewSystem:Dispose()
  141. end
  142. mirrorPreviewSystem = nil
  143. if previewSystem then
  144. previewSystem:Dispose()
  145. end
  146. previewSystem = nil
  147. if roleViewSystem then
  148. roleViewSystem:Dispose()
  149. end
  150. roleViewSystem = nil
  151. end
  152. function UICreateRoleView:ChangeSex(toggle, sexType, result)
  153. if not result then return end
  154. if not self.controller:SetSexType(sexType) then
  155. return
  156. end
  157. if previewSystem and roleViewSystem then
  158. previewSystem:RemoveGo(roleViewSystem:GetGameObject())
  159. end
  160. if mirrorPreviewSystem and roleViewSystem then
  161. mirrorPreviewSystem:RemoveGo(roleViewSystem:GetGameObject())
  162. end
  163. self:_RefreshShowModel()
  164. end
  165. function UICreateRoleView:_RefreshShowModel()
  166. local roleCfgId = self.controller:GetRoleCfgId()
  167. local isMan = (self.controller:GetSexType() == Enum.SexType.Man)
  168. local isWoman = (not isMan)
  169. self.bgBoy:SetActive(isMan)
  170. self.bgGirl:SetActive(isWoman)
  171. self.mirrorBoy:SetActive(isMan)
  172. self.mirrorGirl:SetActive(isWoman)
  173. cancelToggleTigger = true
  174. self.boy.toggle.isOn = isMan
  175. self.girl.toggle.isOn = isWoman
  176. self.hairAndColor.toggle.isOn = true
  177. cancelToggleTigger = false
  178. self:ChangeSelectType(nil, SelectType.HairAndColor, true)
  179. if roleCfgId then
  180. roleViewSystem:RefreshView(Enum.RoleInEnvType.CreateRole, roleCfgId, self.controller:GetViewData(), nil, self, self.RefreshShowComplete)
  181. else
  182. roleViewSystem:Recycle()
  183. end
  184. end
  185. function UICreateRoleView:ChangeSelectType(toggle, selectType, result)
  186. if not result then return end
  187. if cancelToggleTigger then return end
  188. if selectType == SelectType.HairAndColor then
  189. self.hairRoot:SetActive(true)
  190. self.eyesRoot:SetActive(false)
  191. self.headwearRoot:SetActive(false)
  192. cancelToggleTigger = true
  193. self.toggleGroupHair.toggleGroup:SetAllTogglesOff()
  194. self.toggleGroupColor.toggleGroup:SetAllTogglesOff()
  195. self['hair' .. self.controller:GetSelectHairIndex()].toggle.isOn = true
  196. self['color' .. self.controller:GetSelectHairColorIndex()].toggle.isOn = true
  197. self:RefreshUIHair()
  198. self:RefreshUIHairColor()
  199. cancelToggleTigger = false
  200. elseif selectType == SelectType.EyeColor then
  201. self.hairRoot:SetActive(false)
  202. self.eyesRoot:SetActive(true)
  203. self.headwearRoot:SetActive(false)
  204. cancelToggleTigger = true
  205. self.toggleGroupEyesColor.toggleGroup:SetAllTogglesOff()
  206. self['eyesColor' .. self.controller:GetSelectEyeIndex()].toggle.isOn = true
  207. cancelToggleTigger = false
  208. -- elseif selectType == SelectType.Headwear then
  209. else
  210. self.hairRoot:SetActive(false)
  211. self.eyesRoot:SetActive(false)
  212. self.headwearRoot:SetActive(true)
  213. cancelToggleTigger = true
  214. self.toggleGroupHeadwear.toggleGroup:SetAllTogglesOff()
  215. self['headwear' .. self.controller:GetSelectHeadwearsIndex()].toggle.isOn = true
  216. cancelToggleTigger = false
  217. end
  218. end
  219. function UICreateRoleView:ChangeHair(toggle, index, result)
  220. if not result then return end
  221. if cancelToggleTigger then return end
  222. if self.controller:SetSelectHairIndex(index) then
  223. roleViewSystem:RefreshView(Enum.RoleInEnvType.CreateRole, self.controller:GetRoleCfgId(), self.controller:GetViewData(), nil, self, self.RefreshShowComplete)
  224. end
  225. end
  226. function UICreateRoleView:ChangeHairColor(toggle, index, result)
  227. if not result then return end
  228. if cancelToggleTigger then return end
  229. if self.controller:SetSelectHairColorIndex(index) then
  230. self:RefreshUIHairColor()
  231. roleViewSystem:RefreshView(Enum.RoleInEnvType.CreateRole, self.controller:GetRoleCfgId(), self.controller:GetViewData(), nil, self, self.RefreshShowComplete)
  232. end
  233. end
  234. function UICreateRoleView:ChangeEye(toggle, index, result)
  235. if not result then return end
  236. if cancelToggleTigger then return end
  237. if self.controller:SetSelectEyeIndex(index) then
  238. roleViewSystem:RefreshView(Enum.RoleInEnvType.CreateRole, self.controller:GetRoleCfgId(), self.controller:GetViewData(), nil, self, self.RefreshShowComplete)
  239. end
  240. end
  241. function UICreateRoleView:ChangeHeadwear(toggle, index, result)
  242. if not result then return end
  243. if cancelToggleTigger then return end
  244. if self.controller:SetSelectHeadwearsIndex(index) then
  245. roleViewSystem:RefreshView(Enum.RoleInEnvType.CreateRole, self.controller:GetRoleCfgId(), self.controller:GetViewData(), nil, self, self.RefreshShowComplete)
  246. end
  247. end
  248. function UICreateRoleView:OnClickStartGame()
  249. self.controller:OnCreateClick()
  250. end
  251. function UICreateRoleView:OnClickBack()
  252. ManagerContainer.LuaUIMgr:Open(Enum.UIPageName.UILogin)
  253. end
  254. function UICreateRoleView:RefreshShowComplete(go, isNewGo)
  255. if previewSystem then
  256. previewSystem:UpdateGo(go)
  257. end
  258. if mirrorPreviewSystem then
  259. mirrorPreviewSystem:UpdateGo(go)
  260. end
  261. end
  262. function UICreateRoleView:RefreshUIHair()
  263. local isMan = (self.controller:GetSexType() == Enum.SexType.Man)
  264. local isWoman = (not isMan)
  265. self.hair1.headBoy:SetActive(isMan)
  266. self.hair1.headGirl:SetActive(isWoman)
  267. self.hair2.headBoy:SetActive(isMan)
  268. self.hair2.headGirl:SetActive(isWoman)
  269. self.hair3.headBoy:SetActive(isMan)
  270. self.hair3.headGirl:SetActive(isWoman)
  271. self.hair4.headBoy:SetActive(isMan)
  272. self.hair4.headGirl:SetActive(isWoman)
  273. end
  274. function UICreateRoleView:RefreshUIHairColor()
  275. local keyName = self:GetHairKeyName()
  276. local color = self.controller:GetSelectHairColor()
  277. self.hair1[keyName].color.image.color = color
  278. self.hair2[keyName].color.image.color = color
  279. self.hair3[keyName].color.image.color = color
  280. self.hair4[keyName].color.image.color = color
  281. end
  282. function UICreateRoleView:GetHairKeyName()
  283. local isMan = (self.controller:GetSexType() == Enum.SexType.Man)
  284. local keyName = isMan and 'headBoy' or 'headGirl'
  285. return keyName
  286. end
  287. return UICreateRoleView