2025-06-04 05:12:01 +08:00

177 lines
4.9 KiB
Plaintext

autoImport("ChangeHeadCombineCell")
ChangeHeadView = class("ChangeHeadView", ContainerView)
ChangeHeadView.ViewType = UIViewType.PopUpLayer
function ChangeHeadView:OnExit()
if self.choosePortrait then
ServiceNUserProxy.Instance:CallUsePortrait(self.choosePortrait)
end
RedTipProxy.Instance:SeenNew(SceneTip_pb.EREDSYS_MONSTER_IMG)
ChangeHeadView.super.OnExit(self)
end
function ChangeHeadView:Init()
self:AddEvts()
self:AddViewEvts()
self:InitView()
end
function ChangeHeadView:AddEvts()
local revertBtn = self:FindGO("RevertBtn")
self:AddClickEvent(revertBtn,function ()
self:Revert()
end)
end
function ChangeHeadView:AddViewEvts()
self:AddListenEvt(ServiceEvent.NUserNewPortraitFrame , self.UpdatePortraitList)
end
function ChangeHeadView:InitView()
local headCellObj = self:FindGO("HeadContainer")
headCellObj = Game.AssetManager_UI:CreateAsset(ResourcePathHelper.UICell("PlayerHeadCell"), headCellObj);
headCellObj.transform.localPosition = LuaVector3.zero
self.mainHeadCell = PlayerFaceCell.new(headCellObj)
self.mainHeadCell:HideHpMp()
self.originalHeadData = HeadImageData.new()
self.originalHeadData:TransByMyself()
self.mainHeadCell:SetData(self.originalHeadData)
local contentContainer = self:FindGO("ContentContainer")
local wrapConfig = {
wrapObj = contentContainer,
pfbNum = 6,
cellName = "ChangeHeadCombineCell",
control = ChangeHeadCombineCell,
dir = 1,
}
self.itemWrapHelper = WrapCellHelper.new(wrapConfig)
self.itemWrapHelper:AddEventListener(ChangeHeadEvent.Select, self.HandleClickItem, self)
self:UpdatePortraitList()
if self.originalHeadData.iconData.type == HeadImageIconType.Simple then
self.choosePortrait = Game.Myself.data.userdata:Get(UDEnum.PORTRAIT)
self:SetChooseCell(true)
self:SetChooseData(true)
end
end
function ChangeHeadView:Revert()
self:SetChooseData(false)
self:SetChooseCell(false)
self:RevertMyselfHead()
self.choosePortrait = 0
end
function ChangeHeadView:HandleClickItem(cellctl)
if cellctl.data then
local id = cellctl.data.id
local staticData = Table_HeadImage[id]
if staticData and staticData.Picture then
self.mainHeadCell.headIconCell:SetSimpleIcon(staticData.Picture)
self:SetChooseData(false)
self:SetChooseCell(false)
self.choosePortrait = id
self:SetChooseData(true)
cellctl:SetChoose(true)
else
errorLog(string.format("id : %s is not found in Table_HeadImage",tostring(id)))
end
end
end
function ChangeHeadView:UpdatePortraitList()
local data = ChangeHeadProxy.Instance:GetPortraitList()
local newData = self:ReUniteCellData(data, 5)
self.itemWrapHelper:UpdateInfo(newData)
end
function ChangeHeadView:RevertMyselfHead()
local myself = Game.Myself
if myself then
if myself.data:IsTransformed() then
local monsterId = myself.data.props.TransformID:GetValue()
local monsterIcon = monsterId and Table_Monster[monsterId].Icon
if monsterIcon then
self.mainHeadCell.headIconCell:SetSimpleIcon(monsterIcon)
end
else
local userData = myself.data.userdata
if(userData) then
local hairID = userData:Get(UDEnum.HAIR) or nil
local bodyID = userData:Get(UDEnum.BODY) or nil
local sex = userData:Get(UDEnum.SEX) or nil
local haircolor = userData:Get(UDEnum.HAIRCOLOR) or nil
local headID = userData:Get(UDEnum.HEAD) or nil
local faceID = userData:Get(UDEnum.FACE) or nil
local mouthID = userData:Get(UDEnum.MOUTH) or nil
local eye = userData:Get(UDEnum.EYE) or nil
local headIcon = self.mainHeadCell.headIconCell
headIcon:SetHairColor(hairID,haircolor)
hairID,headID,faceID,mouthID = headIcon:ParseDisplayLogic(hairID, headID, faceID, mouthID)
headIcon:SetHair(hairID)
headIcon:SetHairAccessory(hairID)
headIcon:SetBody(bodyID)
headIcon:SetFace(sex)
headIcon:SetHeadAccessory(headID)
headIcon:SetFaceAccessory(faceID)
headIcon:SetMouthAccessory(mouthID)
headIcon:SetEye(eye)
headIcon:Show(headIcon.avatarPars)
headIcon:Hide(headIcon.simpleIcon.gameObject)
end
end
end
end
function ChangeHeadView:SetChooseData(isChoose)
local data = ChangeHeadProxy.Instance:GetPortraitList()
for i=1,#data do
if data[i].id == self.choosePortrait then
data[i]:SetChoose(isChoose)
break
end
end
end
function ChangeHeadView:SetChooseCell(isChoose)
local cells = self.itemWrapHelper:GetCellCtls()
for i=1,#cells do
local cell = cells[i]
for j=1,#cell.childrenObjs do
local child = cell.childrenObjs[j]
if child.data then
if child.data.id == self.choosePortrait then
child:SetChoose(isChoose)
break
end
end
end
end
end
function ChangeHeadView:ReUniteCellData(datas, perRowNum)
local newData = {}
if(datas~=nil and #datas>0)then
for i = 1,#datas do
local i1 = math.floor((i-1)/perRowNum)+1;
local i2 = math.floor((i-1)%perRowNum)+1;
newData[i1] = newData[i1] or {};
if(datas[i] == nil)then
newData[i1][i2] = nil;
else
newData[i1][i2] = datas[i];
end
end
end
return newData;
end