UICreateRoleCtr.lua 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269
  1. local UICreateRoleCtr = class("UICreateRoleCtr", require("UICtrBase"))
  2. local canSelectHairMap = nil
  3. local canSelectHairColorMap = nil
  4. local canSelectEyeMap = nil
  5. local canSelectHeadwearMap = nil
  6. local selectHairIndex = 1
  7. local selectHairColorIndex = 1
  8. local selectEyeIndex = 1
  9. local selectHeadwearIndex = 1
  10. local sexType = Enum.SexType.Woman
  11. local Clamp = function(value, min, max)
  12. if value < min then
  13. return value
  14. end
  15. if value > max then
  16. return max
  17. end
  18. return value
  19. end
  20. local TableToColor = function(table)
  21. if not table then return Color.white end
  22. local r = Clamp(table[1] or 255, 0, 255)
  23. local g = Clamp(table[2] or 255, 0, 255)
  24. local b = Clamp(table[3] or 255, 0, 255)
  25. return Color(r / 255, g / 255, b / 255, 1)
  26. end
  27. local SortRule = function(a, b)
  28. if a < b then
  29. return true
  30. else
  31. return false
  32. end
  33. end
  34. local GetSex = function(key)
  35. local sex = key
  36. while sex >= 10 do
  37. sex = sex * 0.1
  38. end
  39. return math.floor(sex)
  40. end
  41. local SortMap = function(map)
  42. if not map then return end
  43. for _,v in pairs(map) do
  44. if v then
  45. table.sort(v, SortRule)
  46. end
  47. end
  48. end
  49. local InitMap = function(cfgData)
  50. local map = {}
  51. for key, _ in pairs(cfgData) do
  52. local sex = GetSex(key)
  53. local ls = map[sex]
  54. if not ls then
  55. ls = {}
  56. map[sex] = ls
  57. end
  58. table.insert(ls, key)
  59. end
  60. SortMap(map)
  61. return map
  62. end
  63. local InitMapNoSex = function(cfgData)
  64. local map = {}
  65. for key, _ in pairs(cfgData) do
  66. table.insert(map, key)
  67. end
  68. table.sort(map, SortRule)
  69. return map
  70. end
  71. function UICreateRoleCtr:Init(view)
  72. self.view = view
  73. local hairCfg = ManagerContainer.CfgMgr:GetCreateHairCfg()
  74. canSelectHairMap = InitMap(hairCfg)
  75. local hairColorCfg = ManagerContainer.CfgMgr:GetCreateHairColorCfg()
  76. canSelectHairColorMap = InitMapNoSex(hairColorCfg)
  77. local eyeCfg = ManagerContainer.CfgMgr:GetCreateEyeCfg()
  78. canSelectEyeMap = InitMap(eyeCfg)
  79. local headwearCfg = ManagerContainer.CfgMgr:GetCreateHeadwearCfg()
  80. canSelectHeadwearMap = InitMapNoSex(headwearCfg)
  81. -- 默认数据
  82. sexType = Enum.SexType.Woman
  83. self:ResetDefaultSelect()
  84. end
  85. function UICreateRoleCtr:SetData(data)
  86. self.asyncIdx = 0
  87. if data == nil then return end
  88. self.data = data
  89. end
  90. function UICreateRoleCtr:GetAsyncIdx()
  91. self.asyncIdx = self.asyncIdx + 1
  92. return self.asyncIdx
  93. end
  94. function UICreateRoleCtr:GetData()
  95. return self.data
  96. end
  97. function UICreateRoleCtr:OnDispose()
  98. self.data = nil
  99. self.view = nil
  100. canSelectHairMap = nil
  101. canSelectHairColorMap = nil
  102. canSelectEyeMap = nil
  103. canSelectHeadwearMap = nil
  104. selectHairIndex = nil
  105. selectHairColorIndex = nil
  106. selectEyeIndex = nil
  107. selectHeadwearIndex = nil
  108. end
  109. function UICreateRoleCtr:GetSexType()
  110. return sexType
  111. end
  112. function UICreateRoleCtr:SetSexType(newSexType)
  113. if sexType == newSexType then return false end
  114. sexType = newSexType
  115. self:ResetDefaultSelect()
  116. return true
  117. end
  118. function UICreateRoleCtr:GetRoleCfgId()
  119. return CommonUtil.JobIdToRoleId(GlobalConfig.Instance:GetConfigIntValue(GlobalConfig.c_default_profession), sexType)
  120. end
  121. function UICreateRoleCtr:ResetDefaultSelect()
  122. selectHairIndex = 1
  123. selectHairColorIndex = 1
  124. selectEyeIndex = 1
  125. selectHeadwearIndex = 1
  126. end
  127. function UICreateRoleCtr:SetSelectHairIndex(index)
  128. local ls = self:GetCanSelectHairMap()
  129. index = Clamp(index, 1, #ls)
  130. if index == selectHairIndex then return false end
  131. selectHairIndex = index
  132. return true
  133. end
  134. function UICreateRoleCtr:GetSelectHairIndex()
  135. return selectHairIndex
  136. end
  137. function UICreateRoleCtr:GetCanSelectHairMap()
  138. return canSelectHairMap[sexType]
  139. end
  140. function UICreateRoleCtr:SetSelectHairColorIndex(index)
  141. local ls = self:GetCanSelectHairColorMap()
  142. index = Clamp(index, 1, #ls)
  143. if index == selectHairColorIndex then return false end
  144. selectHairColorIndex = index
  145. return true
  146. end
  147. function UICreateRoleCtr:GetSelectHairColorIndex()
  148. return selectHairColorIndex
  149. end
  150. function UICreateRoleCtr:GetCanSelectHairColorMap()
  151. return canSelectHairColorMap
  152. end
  153. function UICreateRoleCtr:GetCanSelectHairColors()
  154. local ls = {}
  155. for i = 1, 7 do
  156. local createHairColorCfg = ManagerContainer.CfgMgr:GetCreateHairColorById(canSelectHairColorMap[i])
  157. if createHairColorCfg then
  158. ls[i] = TableToColor(createHairColorCfg.HairColour)
  159. else
  160. ls[i] = Color.white
  161. end
  162. end
  163. return ls
  164. end
  165. function UICreateRoleCtr:GetSelectHairColor()
  166. local hairColor = canSelectHairColorMap[selectHairColorIndex]
  167. local createHairColorCfg = ManagerContainer.CfgMgr:GetCreateHairColorById(hairColor)
  168. if createHairColorCfg then
  169. return TableToColor(createHairColorCfg.HairColour)
  170. else
  171. return Color.white
  172. end
  173. end
  174. function UICreateRoleCtr:SetSelectEyeIndex(index)
  175. local ls = self:GetCanSelectEyeMap()
  176. index = Clamp(index, 1, #ls)
  177. if index == selectEyeIndex then return false end
  178. selectEyeIndex = index
  179. return true
  180. end
  181. function UICreateRoleCtr:GetSelectEyeIndex()
  182. return selectEyeIndex
  183. end
  184. function UICreateRoleCtr:GetCanSelectEyeMap()
  185. return canSelectEyeMap[sexType]
  186. end
  187. function UICreateRoleCtr:SetSelectHeadwearsIndex(index)
  188. local ls = self:GetCanSelectHeadwearMap()
  189. index = Clamp(index, 1, #ls)
  190. if index == selectHeadwearIndex then return false end
  191. selectHeadwearIndex = index
  192. return true
  193. end
  194. function UICreateRoleCtr:GetSelectHeadwearsIndex()
  195. return selectHeadwearIndex
  196. end
  197. function UICreateRoleCtr:GetCanSelectHeadwearMap()
  198. return canSelectHeadwearMap
  199. end
  200. function UICreateRoleCtr:GetViewData()
  201. local viewData = {}
  202. viewData.eye = canSelectEyeMap[sexType][selectEyeIndex]
  203. viewData.hairColor = canSelectHairColorMap[selectHairColorIndex]
  204. viewData.hair = canSelectHairMap[sexType][selectHairIndex]
  205. local fashionData = {}
  206. viewData.fashionData = fashionData
  207. local id = canSelectHeadwearMap[selectHeadwearIndex]
  208. local headwearCfg = ManagerContainer.CfgMgr:GetCreateHeadwearById(id)
  209. local fashionId = headwearCfg.HeadwearAvatar
  210. local fashionCfg = ManagerContainer.CfgMgr:GetFashionById(fashionId)
  211. fashionData[fashionCfg.FashionLocation] = fashionId
  212. return viewData
  213. end
  214. function UICreateRoleCtr:OnCreateClick()
  215. local roleCfgId = self:GetRoleCfgId()
  216. local eye = canSelectEyeMap[sexType][selectEyeIndex]
  217. local hair = canSelectHairColorMap[selectHairColorIndex]
  218. local hair_avatar = canSelectHairMap[sexType][selectHairIndex]
  219. local id = canSelectHeadwearMap[selectHeadwearIndex]
  220. local headwearCfg = ManagerContainer.CfgMgr:GetCreateHeadwearById(id)
  221. local head = headwearCfg.HeadwearAvatar
  222. local country = GlobalConfig.Instance:GetConfigIntValue(GlobalConfig.c_default_country)
  223. ManagerContainer.NetManager:SendMessage(ProtoMsgId.CS_CREATE_ROLE_REQ, {open_id = self.data.userName, job_id = GlobalConfig.Instance:GetConfigIntValue(GlobalConfig.c_default_profession), sex = sexType, country = country, eye = eye, hair = hair, hair_avatar = hair_avatar, head = head })
  224. end
  225. -- function UICreateRoleCtr:CreateNickName()
  226. -- ManagerContainer.NetManager:SendMessage(ProtoMsgId.CS_NAME_REQ, { name = self.data.userName })
  227. -- end
  228. return UICreateRoleCtr