ro-webgl/Assets/Lua/UI/UICreateRole/UICreateRoleCtr.lua
2021-12-21 09:40:39 +08:00

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