389 lines
11 KiB
Plaintext
389 lines
11 KiB
Plaintext
autoImport("PetCombineTableCell")
|
|
autoImport("PetComposeSkillCell")
|
|
autoImport("PetInfoLabelCell")
|
|
autoImport("PetComposeDendrogram")
|
|
|
|
PetComposeView = class("PetComposeView", BaseView);
|
|
PetComposeView.ViewType = UIViewType.NormalLayer
|
|
local math_floor = math.floor
|
|
local SKIN_CFG = GameConfig.Pet.petSkin
|
|
|
|
local BTN_STSTE =
|
|
{
|
|
combine = {btnName = "com_btn_3s",content = ZhString.PetAdvance_Compose,color = Color(41/255,105/255,0/255)},
|
|
phrchase = {btnName = "com_btn_2s",content = ZhString.PetAdvance_BuyCaptureItem,color = Color(158/255,86/255,0/255)},
|
|
}
|
|
|
|
local PET_TEXTURE_NAME = "give_bg_01"
|
|
|
|
local function SortPet(left,right)
|
|
if left == nil or right == nil then
|
|
return false
|
|
end
|
|
return left.star > right.star;
|
|
end
|
|
|
|
local PetPos = {
|
|
position = Vector3(-2.3,5,5),
|
|
rotation = Quaternion.Euler(-14,-20.7,1),
|
|
}
|
|
local Color = LuaColor.New(1,1,1,0)
|
|
|
|
function PetComposeView:Init()
|
|
self:FindObjs()
|
|
self:AddEvts()
|
|
self:InitView()
|
|
end
|
|
|
|
function PetComposeView:FindObjs()
|
|
self.bgTexture1 = self:FindComponent("Bg1", UITexture)
|
|
self.bgTexture2 = self:FindComponent("Bg2", UITexture)
|
|
self.petName = self:FindComponent("PetName",UILabel)
|
|
self.btn = self:FindComponent("Btn",UISprite)
|
|
self.btnName = self:FindComponent("BtnName",UILabel)
|
|
self.previewBtn = self:FindGO("PreviewBtn")
|
|
self.titleDesc = self:FindComponent("TitleDesc",UILabel)
|
|
self.petTable = self:FindComponent("PetTable",UITable)
|
|
self.starGrid = self:FindComponent("StarGrid",UIGrid)
|
|
self.starPrefab = self:FindGO("StarPrefab")
|
|
self.skinGrid = self:FindComponent("SkinGrid",UIGrid)
|
|
local table = self:FindComponent("AttrTable",UITable)
|
|
self.attriCtl = UIGridListCtrl.new(table, PetInfoLabelCell, "PetInfoLabelCell");
|
|
self.skillPos = self:FindComponent("SkillScrollView",UIScrollView)
|
|
self.attrScrollView = self:FindComponent("AttriScrollView",UIScrollView)
|
|
self.attrPos = self:FindGO("AttrPos")
|
|
self.skinPos = self:FindComponent("SkinScrollView",UIScrollView)
|
|
self.touchZone = self:FindGO("touchZone")
|
|
self.modelContainer = self:FindGO("ModelContainer");
|
|
self.dragScroll = self:FindComponent("DragScrollView",UIDragScrollView)
|
|
self.race = self:FindComponent("Race",UISprite)
|
|
self.nature = self:FindComponent("Nature",UISprite)
|
|
end
|
|
|
|
function PetComposeView:AddToggleChange(toggle, handler)
|
|
EventDelegate.Add(toggle.onChange, function ()
|
|
if toggle.value then
|
|
if handler ~= nil then
|
|
handler(self)
|
|
end
|
|
end
|
|
end)
|
|
end
|
|
|
|
function PetComposeView:SetStar()
|
|
if(not self.curPet)then
|
|
return
|
|
end
|
|
local star = Table_Pet[self.curPet].Star
|
|
local childCount = self.starGrid.gameObject.transform.childCount;
|
|
for i=1,childCount-1 do
|
|
local trans = self.starGrid.gameObject.transform:GetChild(i);
|
|
self:Hide(trans.gameObject)
|
|
end
|
|
|
|
for i=1,star do
|
|
local obj = self.starObj[i];
|
|
if(not obj)then
|
|
local starObj = self:CopyGameObject(self.starPrefab);
|
|
starObj:SetActive(true);
|
|
starObj.transform:SetParent(self.starGrid.gameObject.transform)
|
|
starObj.name = string.format("starSymbol%02d", star);
|
|
self.starObj[i] = starObj;
|
|
else
|
|
obj:SetActive(true);
|
|
end
|
|
end
|
|
self.starGrid:Reposition()
|
|
end
|
|
|
|
function PetComposeView:InitView()
|
|
self.starObj = {}
|
|
self.choosePet = nil
|
|
if(not self.petTableCtl)then
|
|
self.petTableCtl = UIGridListCtrl.new(self.petTable,PetCombineTableCell,"PetCombineTableCell");
|
|
self.petTableCtl:AddEventListener(MouseEvent.MouseClick, self.ClickItemPet, self)
|
|
end
|
|
local starData = PetComposeProxy.Instance:GetPetsIDByStar()
|
|
local petData = {}
|
|
for k,v in pairs(starData) do
|
|
TableUtility.ArrayPushBack(petData,{star = k,value = v})
|
|
end
|
|
table.sort(petData,function (l,r)
|
|
return SortPet(l,r)
|
|
end)
|
|
self.petTableCtl:ResetDatas(petData)
|
|
|
|
local petSkillContainer = self:FindGO("skillWrap");
|
|
local wrapConfig = {
|
|
wrapObj = petSkillContainer,
|
|
pfbNum = 5,
|
|
cellName = "PetComposeSkillCell",
|
|
control = PetComposeSkillCell,
|
|
};
|
|
self.petSkillWrap = WrapCellHelper.new(wrapConfig);
|
|
|
|
if(not self.petSkinCtl)then
|
|
self.petSkinCtl = UIGridListCtrl.new(self.skinGrid,PetComposeItemCell,"PetComposeItemCell");
|
|
self.petSkinCtl:AddEventListener(MouseEvent.MouseClick, self.ClickItemPetSkin, self)
|
|
end
|
|
|
|
local Cells = self.petTableCtl:GetCells()
|
|
if(#Cells>0)then
|
|
Cells = Cells[1]:GetCells()
|
|
if(#Cells>0)then
|
|
self:ClickItemPet(Cells[1])
|
|
end
|
|
end
|
|
PictureManager.Instance:SetUI(PET_TEXTURE_NAME,self.bgTexture1)
|
|
PictureManager.Instance:SetUI(PET_TEXTURE_NAME,self.bgTexture2)
|
|
end
|
|
|
|
function PetComposeView:ClickItemPetSkin(cellctl)
|
|
local skinID = cellctl and cellctl.data or nil
|
|
if(self.curSkin~=skinID)then
|
|
self.curSkin = skinID
|
|
else
|
|
self.curSkin = self.curPet
|
|
end
|
|
local petTable = self.petSkinCtl:GetCells()
|
|
for _,cell in pairs(petTable) do
|
|
cell:SetChoose(self.curSkin)
|
|
end
|
|
self.dragScroll.scrollView = self.skinPos
|
|
self:UpdateModel(self.curSkin)
|
|
end
|
|
|
|
function PetComposeView:ClickItemPet(cellctl)
|
|
local petID = cellctl and cellctl.data
|
|
if(self.curPet~=petID)then
|
|
self.curPet = petID
|
|
self:_setBtnState()
|
|
PetComposeProxy.Instance:SetCurPet(petID)
|
|
local petTable = self.petTableCtl:GetCells()
|
|
for _,cells in pairs(petTable) do
|
|
for k,cell in pairs(cells:GetCells()) do
|
|
cell:SetChoose(petID)
|
|
end
|
|
end
|
|
self.toggleTab[1]:Set(true)
|
|
self.toggleTab[2]:Set(false)
|
|
self.toggleTab[3]:Set(false)
|
|
self:SetStar()
|
|
self:ClickSkillTog()
|
|
if(petID)then
|
|
self.petName.text = Table_Pet[petID] and Table_Pet[petID].Name or ""
|
|
self:UpdateModel(petID)
|
|
end
|
|
self.curSkin = nil
|
|
end
|
|
end
|
|
|
|
function PetComposeView:_setBtnState()
|
|
if(Table_PetCompose[self.curPet])then
|
|
self.btn.spriteName = BTN_STSTE.combine.btnName
|
|
self.btnName.text = BTN_STSTE.combine.content
|
|
self.btnName.effectColor = BTN_STSTE.combine.color
|
|
self.previewBtn:SetActive(true)
|
|
else
|
|
self.btn.spriteName = BTN_STSTE.phrchase.btnName
|
|
self.btnName.text = BTN_STSTE.phrchase.content
|
|
self.btnName.effectColor = BTN_STSTE.phrchase.color
|
|
self.previewBtn:SetActive(false)
|
|
end
|
|
end
|
|
|
|
function PetComposeView:ObserverDestroyed(obj)
|
|
if(obj~=nil and obj == self.model)then
|
|
self.model:SetParent(nil);
|
|
self.model = nil;
|
|
end
|
|
end
|
|
|
|
function PetComposeView:UpdateModel(petid)
|
|
self:ResetModel()
|
|
if(petid and petid ~= 0)then
|
|
self.model = Asset_RoleUtility.CreateMonsterRole( petid );
|
|
self.model:SetParent(self.modelContainer.transform);
|
|
self.model:SetLayer(RO.Config.Layer.UI.Value);
|
|
|
|
local monsterData = Table_Monster[petid];
|
|
local scale = monsterData.Scale or 1;
|
|
self.model:SetScale(scale);
|
|
|
|
self.model:SetPosition(LuaGeometry.Const_V3_zero);
|
|
self.model:SetEulerAngles(LuaGeometry.Const_Qua_identity);
|
|
|
|
self.model:RegisterWeakObserver(self);
|
|
self.model:PlayAction_Idle();
|
|
self.model:SetShadowEnable(false);
|
|
end
|
|
end
|
|
|
|
function PetComposeView:HandleClose()
|
|
self:Show(self.modelContainer)
|
|
end
|
|
|
|
function PetComposeView:OnEnter()
|
|
EventManager.Me():AddEventListener(QuickBuyEvent.CloseUI,self.HandleClose,self)
|
|
end
|
|
|
|
function PetComposeView:OnExit()
|
|
EventManager.Me():RemoveEventListener(QuickBuyEvent.CloseUI,self.HandleClose,self)
|
|
PictureManager.Instance:UnLoadUI()
|
|
self:ResetModel()
|
|
PetComposeView.super.OnExit(self);
|
|
end
|
|
|
|
function PetComposeView:ResetModel()
|
|
if(self.model)then
|
|
self.model:Destroy();
|
|
self.model = nil;
|
|
end
|
|
end
|
|
|
|
function PetComposeView:AddEvts()
|
|
self:AddDragEvent(self.touchZone,function ( obj,delta )
|
|
if(nil~=self.model)then
|
|
self.model:RotateDelta(-delta.x)
|
|
end
|
|
end)
|
|
self:AddClickEvent(self.btn.gameObject,function (g)
|
|
self:OnBtn()
|
|
end)
|
|
self:AddClickEvent(self.previewBtn,function (g)
|
|
self:OnPreview()
|
|
end)
|
|
local skillTog = self:FindGO("SkillTog"):GetComponent(UIToggle)
|
|
local attrTog = self:FindGO("AttrTog"):GetComponent(UIToggle)
|
|
local skinTog = self:FindGO("SkinTog"):GetComponent(UIToggle)
|
|
self.toggleTab = {skillTog,attrTog,skinTog}
|
|
self:AddToggleChange(skillTog, self.ClickSkillTog)
|
|
self:AddToggleChange(attrTog, self.ClickAttrTog)
|
|
self:AddToggleChange(skinTog, self.ClickSkinTog)
|
|
end
|
|
|
|
function PetComposeView:OnPreview()
|
|
self:sendNotification(UIEvent.JumpPanel, {view = PanelConfig.PetComposePreviewPopUp,viewdata = self.curPet})
|
|
end
|
|
|
|
function PetComposeView:ClickSkillTog()
|
|
local data = self:GetSkillData()
|
|
if(not data)then
|
|
return
|
|
end
|
|
self.dragScroll.scrollView = self.skinPos
|
|
self.petSkillWrap:ResetDatas(data)
|
|
self:Show(self.skillPos.gameObject)
|
|
self:Hide(self.attrPos)
|
|
self:Hide(self.skinPos.gameObject)
|
|
end
|
|
|
|
local function GetNatureIcon(petid)
|
|
local data = Table_Monster[petid]
|
|
if(data)then
|
|
return data.Nature
|
|
end
|
|
end
|
|
|
|
|
|
local function GetRaceIcon(petid)
|
|
local data = Table_Monster[petid]
|
|
if(data)then
|
|
local race = data.Race
|
|
for _,v in pairs(Table_Pet_AdventureCond) do
|
|
if(v.TypeID=='Race' and v.Param[1]==race)then
|
|
return v.Icon
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
local PETINFOLABELCELL_TYPE = PetInfoLabelCell.Type.Attri
|
|
local LABEL_POSITION_X = 300
|
|
function PetComposeView:ClickAttrTog()
|
|
if(not self.curPet)then
|
|
return
|
|
end
|
|
local attrData = PetComposeProxy.Instance:GetPetAttr(Table_Monster[self.curPet].ClassType)
|
|
local attdata = {}
|
|
for k,v in pairs(attrData) do
|
|
local data = {}
|
|
data[1] = PetInfoLabelCell.Type.Attri
|
|
data[2] = Table_RoleData[k].PropName
|
|
data[3] = math_floor(v)
|
|
data[4] = LABEL_POSITION_X
|
|
attdata[#attdata+1] = data
|
|
end
|
|
self.dragScroll.scrollView = self.attrScrollView
|
|
self.attriCtl:ResetDatas(attdata)
|
|
self.attrScrollView:ResetPosition()
|
|
self:Hide(self.skillPos.gameObject)
|
|
self:Show(self.attrPos)
|
|
self:Hide(self.skinPos.gameObject)
|
|
|
|
-- set icon
|
|
local natureIcon = GetNatureIcon(self.curPet)
|
|
local raceIcon = GetRaceIcon(self.curPet)
|
|
IconManager:SetUIIcon(natureIcon,self.nature)
|
|
IconManager:SetUIIcon(raceIcon,self.race)
|
|
end
|
|
|
|
function PetComposeView:ClickSkinTog()
|
|
self:Hide(self.skillPos.gameObject)
|
|
self:Hide(self.attrPos)
|
|
self:Show(self.skinPos.gameObject)
|
|
if(not self.curPet)then return end
|
|
if(not SKIN_CFG or not SKIN_CFG[self.curPet])then
|
|
self.petSkinCtl:ResetDatas()
|
|
return
|
|
end
|
|
self.dragScroll.scrollView = self.skinPos
|
|
self.petSkinCtl:ResetDatas(SKIN_CFG[self.curPet])
|
|
local petTable = self.petSkinCtl:GetCells()
|
|
for _,cell in pairs(petTable) do
|
|
cell:SetChoose(self.curSkin)
|
|
end
|
|
end
|
|
|
|
function PetComposeView:GetSkillData()
|
|
local skillData = {}
|
|
local petData = self.curPet and Table_Pet[self.curPet]
|
|
if(not petData)then
|
|
return
|
|
end
|
|
for i=1,5 do
|
|
local skillConfig = petData["Skill_"..i];
|
|
if(skillConfig[1] and skillConfig[2])then
|
|
local fullSkillid = skillConfig[1] - skillConfig[1]%10 + skillConfig[2];
|
|
-- helplog("fullSkillid: ",fullSkillid)
|
|
TableUtility.ArrayPushBack(skillData,fullSkillid)
|
|
end
|
|
end
|
|
return skillData
|
|
end
|
|
|
|
function PetComposeView:OnBtn()
|
|
if(not self.curPet)then
|
|
return
|
|
end
|
|
local isCompose = nil~=Table_PetCompose[self.curPet]
|
|
if(isCompose)then
|
|
self:sendNotification(UIEvent.JumpPanel, {view = PanelConfig.PetComposePopUp,viewdata = self.curPet})
|
|
else
|
|
local petData= Table_Pet[self.curPet]
|
|
if(nil~=petData and #petData.HobbyItem>0)then
|
|
local lackItem= {id = petData.HobbyItem[1], count = 1};
|
|
QuickBuyProxy.Instance:TryOpenView({lackItem})
|
|
self:Hide(self.modelContainer)
|
|
end
|
|
end
|
|
end
|
|
|
|
function PetComposeView:AddIgnoreBounds(obj)
|
|
if(self.gameObject and self.closecomp)then
|
|
self.closecomp:AddTarget(obj.transform);
|
|
end
|
|
end
|
|
|
|
|