270 lines
7.1 KiB
Lua
270 lines
7.1 KiB
Lua
local UICreateRoleCtr = class("UICreateRoleCtr", require("UICtrBase"))
|
|
|
|
local canSelectHairMap = nil
|
|
local canSelectHairColorMap = nil
|
|
local canSelectEyeMap = nil
|
|
local canSelectHeadwearMap = nil
|
|
|
|
local selectHairIndex = 1
|
|
local selectHairColorIndex = 1
|
|
local selectEyeIndex = 1
|
|
local selectHeadwearIndex = 1
|
|
|
|
local sexType = Enum.SexType.Woman
|
|
|
|
local Clamp = function(value, min, max)
|
|
if value < min then
|
|
return value
|
|
end
|
|
if value > max then
|
|
return max
|
|
end
|
|
return value
|
|
end
|
|
|
|
local TableToColor = function(table)
|
|
if not table then return Color.white end
|
|
local r = Clamp(table[1] or 255, 0, 255)
|
|
local g = Clamp(table[2] or 255, 0, 255)
|
|
local b = Clamp(table[3] or 255, 0, 255)
|
|
return Color(r / 255, g / 255, b / 255, 1)
|
|
end
|
|
|
|
local SortRule = function(a, b)
|
|
if a < b then
|
|
return true
|
|
else
|
|
return false
|
|
end
|
|
end
|
|
|
|
local GetSex = function(key)
|
|
local sex = key
|
|
while sex >= 10 do
|
|
sex = sex * 0.1
|
|
end
|
|
return math.floor(sex)
|
|
end
|
|
|
|
local SortMap = function(map)
|
|
if not map then return end
|
|
for _,v in pairs(map) do
|
|
if v then
|
|
table.sort(v, SortRule)
|
|
end
|
|
end
|
|
end
|
|
|
|
local InitMap = function(cfgData)
|
|
local map = {}
|
|
for key, _ in pairs(cfgData) do
|
|
local sex = GetSex(key)
|
|
local ls = map[sex]
|
|
if not ls then
|
|
ls = {}
|
|
map[sex] = ls
|
|
end
|
|
table.insert(ls, key)
|
|
end
|
|
SortMap(map)
|
|
return map
|
|
end
|
|
|
|
local InitMapNoSex = function(cfgData)
|
|
local map = {}
|
|
for key, _ in pairs(cfgData) do
|
|
table.insert(map, key)
|
|
end
|
|
table.sort(map, SortRule)
|
|
return map
|
|
end
|
|
|
|
function UICreateRoleCtr:Init(view)
|
|
self.view = view
|
|
|
|
local hairCfg = ManagerContainer.CfgMgr:GetCreateHairCfg()
|
|
canSelectHairMap = InitMap(hairCfg)
|
|
local hairColorCfg = ManagerContainer.CfgMgr:GetCreateHairColorCfg()
|
|
canSelectHairColorMap = InitMapNoSex(hairColorCfg)
|
|
local eyeCfg = ManagerContainer.CfgMgr:GetCreateEyeCfg()
|
|
canSelectEyeMap = InitMap(eyeCfg)
|
|
local headwearCfg = ManagerContainer.CfgMgr:GetCreateHeadwearCfg()
|
|
canSelectHeadwearMap = InitMapNoSex(headwearCfg)
|
|
|
|
-- 默认数据
|
|
sexType = Enum.SexType.Woman
|
|
self:ResetDefaultSelect()
|
|
end
|
|
|
|
function UICreateRoleCtr:SetData(data)
|
|
self.asyncIdx = 0
|
|
if data == nil then return end
|
|
self.data = data
|
|
end
|
|
|
|
function UICreateRoleCtr:GetAsyncIdx()
|
|
self.asyncIdx = self.asyncIdx + 1
|
|
return self.asyncIdx
|
|
end
|
|
|
|
function UICreateRoleCtr:GetData()
|
|
return self.data
|
|
end
|
|
|
|
function UICreateRoleCtr:OnDispose()
|
|
self.data = nil
|
|
self.view = nil
|
|
canSelectHairMap = nil
|
|
canSelectHairColorMap = nil
|
|
canSelectEyeMap = nil
|
|
canSelectHeadwearMap = nil
|
|
selectHairIndex = nil
|
|
selectHairColorIndex = nil
|
|
selectEyeIndex = nil
|
|
selectHeadwearIndex = nil
|
|
end
|
|
|
|
function UICreateRoleCtr:GetSexType()
|
|
return sexType
|
|
end
|
|
|
|
function UICreateRoleCtr:SetSexType(newSexType)
|
|
if sexType == newSexType then return false end
|
|
sexType = newSexType
|
|
self:ResetDefaultSelect()
|
|
return true
|
|
end
|
|
|
|
function UICreateRoleCtr:GetRoleCfgId()
|
|
return CommonUtil.JobIdToRoleId(GlobalConfig.Instance:GetConfigIntValue(GlobalConfig.c_default_profession), sexType)
|
|
end
|
|
|
|
function UICreateRoleCtr:ResetDefaultSelect()
|
|
selectHairIndex = 1
|
|
selectHairColorIndex = 1
|
|
selectEyeIndex = 1
|
|
selectHeadwearIndex = 1
|
|
end
|
|
|
|
function UICreateRoleCtr:SetSelectHairIndex(index)
|
|
local ls = self:GetCanSelectHairMap()
|
|
index = Clamp(index, 1, #ls)
|
|
if index == selectHairIndex then return false end
|
|
selectHairIndex = index
|
|
return true
|
|
end
|
|
|
|
function UICreateRoleCtr:GetSelectHairIndex()
|
|
return selectHairIndex
|
|
end
|
|
|
|
function UICreateRoleCtr:GetCanSelectHairMap()
|
|
return canSelectHairMap[sexType]
|
|
end
|
|
|
|
function UICreateRoleCtr:SetSelectHairColorIndex(index)
|
|
local ls = self:GetCanSelectHairColorMap()
|
|
index = Clamp(index, 1, #ls)
|
|
if index == selectHairColorIndex then return false end
|
|
selectHairColorIndex = index
|
|
return true
|
|
end
|
|
|
|
function UICreateRoleCtr:GetSelectHairColorIndex()
|
|
return selectHairColorIndex
|
|
end
|
|
|
|
function UICreateRoleCtr:GetCanSelectHairColorMap()
|
|
return canSelectHairColorMap
|
|
end
|
|
|
|
function UICreateRoleCtr:GetCanSelectHairColors()
|
|
local ls = {}
|
|
for i = 1, 7 do
|
|
local createHairColorCfg = ManagerContainer.CfgMgr:GetCreateHairColorById(canSelectHairColorMap[i])
|
|
if createHairColorCfg then
|
|
ls[i] = TableToColor(createHairColorCfg.HairColour)
|
|
else
|
|
ls[i] = Color.white
|
|
end
|
|
end
|
|
return ls
|
|
end
|
|
|
|
function UICreateRoleCtr:GetSelectHairColor()
|
|
local hairColor = canSelectHairColorMap[selectHairColorIndex]
|
|
local createHairColorCfg = ManagerContainer.CfgMgr:GetCreateHairColorById(hairColor)
|
|
if createHairColorCfg then
|
|
return TableToColor(createHairColorCfg.HairColour)
|
|
else
|
|
return Color.white
|
|
end
|
|
end
|
|
|
|
function UICreateRoleCtr:SetSelectEyeIndex(index)
|
|
local ls = self:GetCanSelectEyeMap()
|
|
index = Clamp(index, 1, #ls)
|
|
if index == selectEyeIndex then return false end
|
|
selectEyeIndex = index
|
|
return true
|
|
end
|
|
|
|
function UICreateRoleCtr:GetSelectEyeIndex()
|
|
return selectEyeIndex
|
|
end
|
|
|
|
function UICreateRoleCtr:GetCanSelectEyeMap()
|
|
return canSelectEyeMap[sexType]
|
|
end
|
|
|
|
function UICreateRoleCtr:SetSelectHeadwearsIndex(index)
|
|
local ls = self:GetCanSelectHeadwearMap()
|
|
index = Clamp(index, 1, #ls)
|
|
if index == selectHeadwearIndex then return false end
|
|
selectHeadwearIndex = index
|
|
return true
|
|
end
|
|
|
|
function UICreateRoleCtr:GetSelectHeadwearsIndex()
|
|
return selectHeadwearIndex
|
|
end
|
|
|
|
function UICreateRoleCtr:GetCanSelectHeadwearMap()
|
|
return canSelectHeadwearMap
|
|
end
|
|
|
|
function UICreateRoleCtr:GetViewData()
|
|
local viewData = {}
|
|
viewData.eye = canSelectEyeMap[sexType][selectEyeIndex]
|
|
viewData.hairColor = canSelectHairColorMap[selectHairColorIndex]
|
|
viewData.hair = canSelectHairMap[sexType][selectHairIndex]
|
|
local fashionData = {}
|
|
viewData.fashionData = fashionData
|
|
|
|
local id = canSelectHeadwearMap[selectHeadwearIndex]
|
|
local headwearCfg = ManagerContainer.CfgMgr:GetCreateHeadwearById(id)
|
|
local fashionId = headwearCfg.HeadwearAvatar
|
|
local fashionCfg = ManagerContainer.CfgMgr:GetFashionById(fashionId)
|
|
fashionData[fashionCfg.FashionLocation] = fashionId
|
|
return viewData
|
|
end
|
|
|
|
function UICreateRoleCtr:OnCreateClick()
|
|
local roleCfgId = self:GetRoleCfgId()
|
|
local eye = canSelectEyeMap[sexType][selectEyeIndex]
|
|
local hair = canSelectHairColorMap[selectHairColorIndex]
|
|
local hair_avatar = canSelectHairMap[sexType][selectHairIndex]
|
|
local id = canSelectHeadwearMap[selectHeadwearIndex]
|
|
local headwearCfg = ManagerContainer.CfgMgr:GetCreateHeadwearById(id)
|
|
local head = headwearCfg.HeadwearAvatar
|
|
local country = GlobalConfig.Instance:GetConfigIntValue(GlobalConfig.c_default_country)
|
|
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 })
|
|
end
|
|
|
|
-- function UICreateRoleCtr:CreateNickName()
|
|
-- ManagerContainer.NetManager:SendMessage(ProtoMsgId.CS_NAME_REQ, { name = self.data.userName })
|
|
-- end
|
|
|
|
return UICreateRoleCtr
|
|
|