505 lines
15 KiB
Plaintext
505 lines
15 KiB
Plaintext
PlayerDetailView = class("PlayerDetailView", ContainerView)
|
|
|
|
PlayerDetailView.ViewType = UIViewType.CheckLayer
|
|
|
|
autoImport("SimplePlayer");
|
|
autoImport("MyselfEquipItemCell");
|
|
autoImport("PlayerAttriButeView");
|
|
autoImport("PackageEquipPage");
|
|
|
|
PlayerDetailView.State = {
|
|
None = "PlayerDetailView_State_None",
|
|
Equip = "PlayerDetailView_State_Equip",
|
|
Attri = "PlayerDetailView_State_Attri",
|
|
Fashion = "PlayerDetailView_State_Fashion"
|
|
}
|
|
|
|
local tempV3 = LuaVector3();
|
|
|
|
function PlayerDetailView:Init()
|
|
self:InitUI();
|
|
end
|
|
|
|
function PlayerDetailView:TransEquipGrid(grid, width)
|
|
local equipGrid = {};
|
|
equipGrid.grid = grid;
|
|
equipGrid.transform = grid.transform;
|
|
equipGrid.gameObject = grid.gameObject;
|
|
equipGrid.Reposition = function (equipGrid_self)
|
|
equipGrid_self.grid:Reposition();
|
|
|
|
local childCount = equipGrid_self.transform.childCount;
|
|
if(childCount == 13)then
|
|
local cell13 = equipGrid_self.transform:GetChild(12);
|
|
if(cell13)then
|
|
tempV3:Set(216, -488);
|
|
cell13.transform.localPosition = tempV3;
|
|
end
|
|
elseif(childCount == 14)then
|
|
local cell13 = equipGrid_self.transform:GetChild(12);
|
|
if(cell13)then
|
|
tempV3:Set(width, -488);
|
|
cell13.transform.localPosition = tempV3;
|
|
end
|
|
local cell14 = equipGrid_self.transform:GetChild(13);
|
|
if(cell14)then
|
|
tempV3:Set(width * 2, -488);
|
|
cell14.transform.localPosition = tempV3;
|
|
end
|
|
end
|
|
end
|
|
return equipGrid;
|
|
end
|
|
|
|
local fashion_reposition = function (fashionGrid_self)
|
|
local childCount = fashionGrid_self.transform.childCount;
|
|
fashionGrid_self.grid.cellHeight = childCount > 6 and 582/math.ceil(childCount/2) or 195.6;
|
|
fashionGrid_self.grid:Reposition();
|
|
end
|
|
|
|
function PlayerDetailView:GetFashionGrid()
|
|
local grid = self:FindComponent("FashionGrid", UIGrid);
|
|
|
|
local fashionGrid = {};
|
|
fashionGrid.grid = grid;
|
|
fashionGrid.transform = grid.transform;
|
|
fashionGrid.gameObject = grid.gameObject;
|
|
fashionGrid.Reposition = fashion_reposition;
|
|
|
|
fashionGrid.comp = fashionGrid.gameObject:GetComponent(GameObjectForLua);
|
|
if(not fashionGrid.comp)then
|
|
fashionGrid.comp = fashionGrid.gameObject:AddComponent(GameObjectForLua);
|
|
end
|
|
fashionGrid.comp.onEnable = function () fashionGrid.Reposition(fashionGrid) end
|
|
|
|
return fashionGrid;
|
|
end
|
|
|
|
function PlayerDetailView:InitUI()
|
|
self.roleBord = self:FindGO("RoleBord")
|
|
self.roleTex = self:FindComponent("RoleTexture", UITexture);
|
|
|
|
self.myEquips = self:FindGO("MyEquips");
|
|
self.roleEquips = self:FindGO("RoleEquips");
|
|
|
|
local myGrid = self:FindComponent("MyEquipGrid", UIGrid);
|
|
self.myEquipGrid = self:TransEquipGrid(myGrid, 144);
|
|
local playerGrid = self:FindComponent("PlayerEquipGrid", UIGrid);
|
|
self.playerEquipGrid = self:TransEquipGrid(playerGrid, 129);
|
|
|
|
self.myRoleEquip, self.playerRoleEquip = {}, {};
|
|
for i = 1,14 do
|
|
local myObj = self:LoadPreferb("cell/RoleEquipItemCell", self.myEquipGrid);
|
|
myObj.name = "RoleEquipItemCell"..i;
|
|
|
|
local playerObj = self:LoadPreferb("cell/RoleEquipItemCell", self.playerEquipGrid);
|
|
playerObj.name = "RoleEquipItemCell"..i;
|
|
|
|
self.myRoleEquip[i] = MyselfEquipItemCell.new(myObj, i);
|
|
self.myRoleEquip[i]:AddEventListener(MouseEvent.MouseClick, self.ClickMyEquip, self);
|
|
|
|
self.playerRoleEquip[i] = MyselfEquipItemCell.new(playerObj, i);
|
|
self.playerRoleEquip[i]:AddEventListener(MouseEvent.MouseClick, self.ClickPlayerEquip, self);
|
|
end
|
|
|
|
self.myEquipGrid:Reposition();
|
|
self.playerEquipGrid:Reposition();
|
|
|
|
self.myAttriHolder = self:FindGO("attrViewHolder");
|
|
self.playerAttriHolder = self:FindGO("PlayerAttriViewHolder");
|
|
|
|
self.roleFashions = self:FindGO("RoleFashions")
|
|
|
|
self.roleInfo = self:FindGO("RoleInfo");
|
|
self.playerName = self:FindComponent("Name", UILabel, self.roleInfo);
|
|
self.partnerName = self:FindComponent("PartnerName", UILabel, self.roleInfo);
|
|
-- self.playerGuildName = self:FindComponent("GuildName", UILabel, roleInfo);
|
|
-- self.playerGuildIcon = self:FindComponent("GuildIcon", UISprite, roleInfo);
|
|
|
|
self.normalStick = self:FindComponent("NormalStick", UISprite);
|
|
self.chooseSymbol = self:FindGO("ChooseSymbol");
|
|
|
|
self:InitTabEvent();
|
|
|
|
self.leftState = PlayerDetailView.State.None;
|
|
self.rightState = PlayerDetailView.State.Equip;
|
|
self:UpdateLeftState();
|
|
self:UpdateRightState();
|
|
|
|
self.myBaseAttriView = self:AddSubView("BaseAttributeView", BaseAttributeView);
|
|
self.playerAttriView = self:AddSubView("PlayerAttriButeView", PlayerAttriButeView);
|
|
end
|
|
|
|
function PlayerDetailView:InitFashionCtl(playerPro)
|
|
local shieldShow = TableUtility.ArrayFindIndex(PackageEquip_ShowShieldPart_Class, playerPro) ~= 0
|
|
if (nil ~= self.shieldShow and shieldShow == self.shieldShow) then return end
|
|
self.shieldShow = shieldShow
|
|
|
|
local fashionGrid = self:GetFashionGrid();
|
|
if (fashionGrid.transform.childCount > 0) then
|
|
for i = fashionGrid.transform.childCount - 1, 0, -1 do
|
|
local go = fashionGrid.transform:GetChild(i);
|
|
if (go) then
|
|
GameObject.DestroyImmediate(go.gameObject);
|
|
end
|
|
end
|
|
end
|
|
|
|
self.fashionEquips = {};
|
|
for i = 1, #PackageEquip_FashionParts do
|
|
local index = PackageEquip_FashionParts[i];
|
|
if (index ~= 1 or shieldShow) then
|
|
local obj = self:LoadPreferb("cell/RoleEquipItemCell", fashionGrid);
|
|
obj.name = "FashionEquipItemCell" .. index;
|
|
self.fashionEquips[index] = MyselfEquipItemCell.new(obj, index, true);
|
|
self.fashionEquips[index]:AddEventListener(MouseEvent.MouseClick, self.ClickPlayerEquip, self);
|
|
end
|
|
end
|
|
fashionGrid:Reposition();
|
|
end
|
|
|
|
function PlayerDetailView:ClickMyEquip(cellCtl)
|
|
self:ClickEquip(cellCtl, true);
|
|
end
|
|
|
|
function PlayerDetailView:ClickPlayerEquip(cellCtl)
|
|
self:ClickEquip(cellCtl, false);
|
|
end
|
|
|
|
function PlayerDetailView:ClickEquip(cellCtl, isClickMyself)
|
|
if(cellCtl~=nil and self.chooseEquip~=cellCtl)then
|
|
local data = cellCtl.data;
|
|
if(data)then
|
|
local offset = isClickMyself and {190, 0} or {-190, 0};
|
|
self:ShowPlayerEquipTip(data, cellCtl.gameObject, offset, isClickMyself);
|
|
self.chooseSymbol.transform:SetParent(cellCtl.gameObject.transform, false);
|
|
self.chooseSymbol.transform.localPosition = Vector3.zero;
|
|
self.chooseSymbol:SetActive(true);
|
|
else
|
|
self:CancelChoose();
|
|
self:ShowItemTip();
|
|
end
|
|
|
|
self.chooseEquip = cellCtl;
|
|
else
|
|
self:CancelChoose();
|
|
self:ShowItemTip();
|
|
end
|
|
end
|
|
|
|
function PlayerDetailView:ShowPlayerEquipTip(data, ignoreBound, offset, isClickMyself)
|
|
local callback = function ()
|
|
self:CancelChoose();
|
|
end
|
|
local sdata = {
|
|
itemdata = data,
|
|
ignoreBounds = {ignoreBound},
|
|
callback = callback,
|
|
};
|
|
|
|
local itemtip = self:ShowItemTip(sdata, self.normalStick, nil, offset);
|
|
|
|
local compareData = nil;
|
|
if(isClickMyself)then
|
|
compareData = self.playerEquipDatas[data.index];
|
|
else
|
|
compareData = BagProxy.Instance.roleEquip:GetEquipBySite(data.index);
|
|
end
|
|
|
|
if(itemtip)then
|
|
if(compareData and self.rightState ~= PlayerDetailView.State.Fashion)then
|
|
local cell = itemtip:GetCell(1);
|
|
if(cell)then
|
|
local compareFunc = function (data)
|
|
self.leftState = PlayerDetailView.State.Equip;
|
|
self:UpdateLeftState();
|
|
self:CancelChoose();
|
|
|
|
local sdata = {};
|
|
if(isClickMyself)then
|
|
sdata.itemdata = compareData;
|
|
sdata.compdata1 = data;
|
|
else
|
|
sdata.itemdata = data;
|
|
sdata.compdata1 = compareData;
|
|
end
|
|
self:ShowItemTip(sdata, self.normalStick, nil, {0,0});
|
|
end
|
|
cell:AddTipFunc(ZhString.PlayerDetailView_CompareTip, compareFunc, data, true);
|
|
end
|
|
end
|
|
|
|
itemtip:HideEquipedSymbol();
|
|
end
|
|
end
|
|
|
|
function PlayerDetailView:CancelChoose()
|
|
self.chooseEquip = nil;
|
|
self.chooseSymbol.transform:SetParent(self.trans, false);
|
|
self.chooseSymbol:SetActive(false);
|
|
end
|
|
|
|
function PlayerDetailView:InitTabEvent()
|
|
self.leftequipInfoTab = self:FindGO("EquipInfoTab");
|
|
self:AddClickEvent(self.leftequipInfoTab, function (go)
|
|
if(self.leftState == PlayerDetailView.State.Equip)then
|
|
self.leftState = PlayerDetailView.State.None;
|
|
else
|
|
self.leftState = PlayerDetailView.State.Equip;
|
|
end
|
|
self:UpdateLeftState();
|
|
end);
|
|
|
|
self.rightattrInfoTab = self:FindGO("AttrInfoTab");
|
|
self:AddClickEvent(self.rightattrInfoTab, function (go)
|
|
if(self.leftState == PlayerDetailView.State.Attri)then
|
|
self.leftState = PlayerDetailView.State.None;
|
|
else
|
|
self.leftState = PlayerDetailView.State.Attri;
|
|
end
|
|
self:UpdateLeftState();
|
|
end);
|
|
|
|
self.equipTab = self:FindGO("EquipTab");
|
|
self.attriTab = self:FindGO("AttriTab");
|
|
self.fashionTab = self:FindGO("FashionTab");
|
|
self:AddClickEvent(self.equipTab, function (go)
|
|
self.leftState = PlayerDetailView.State.Equip;
|
|
self.rightState = PlayerDetailView.State.Equip;
|
|
self:UpdateLeftState();
|
|
self:UpdateRightState();
|
|
end);
|
|
self:AddClickEvent(self.attriTab, function (go)
|
|
self.leftState = PlayerDetailView.State.Attri;
|
|
self.rightState = PlayerDetailView.State.Attri;
|
|
self:UpdateLeftState();
|
|
self:UpdateRightState();
|
|
end);
|
|
self:AddClickEvent(self.fashionTab, function (go)
|
|
self.leftState = PlayerDetailView.State.Fashion;
|
|
self.rightState = PlayerDetailView.State.Fashion;
|
|
self:UpdateLeftState();
|
|
self:UpdateRightState();
|
|
end);
|
|
end
|
|
|
|
function PlayerDetailView:UpdateLeftState()
|
|
if(self.leftState == PlayerDetailView.State.Equip)then
|
|
self.leftequipInfoTab.transform.localRotation = Quaternion.Euler(0,180,0);
|
|
self.rightattrInfoTab.transform.localRotation = Quaternion.identity;
|
|
|
|
self.myEquips.gameObject:SetActive(true);
|
|
self.myAttriHolder:SetActive(false);
|
|
|
|
elseif(self.leftState == PlayerDetailView.State.Attri)then
|
|
self.rightattrInfoTab.transform.localRotation = Quaternion.Euler(0,180,0);
|
|
self.leftequipInfoTab.transform.localRotation = Quaternion.identity;
|
|
|
|
self.myEquips.gameObject:SetActive(false);
|
|
self.myAttriHolder:SetActive(true);
|
|
self.myBaseAttriView:showMySelf();
|
|
else
|
|
self.rightattrInfoTab.transform.localRotation = Quaternion.identity;;
|
|
self.leftequipInfoTab.transform.localRotation = Quaternion.identity;
|
|
|
|
self.myEquips.gameObject:SetActive(false);
|
|
self.myAttriHolder:SetActive(false);
|
|
end
|
|
end
|
|
|
|
function PlayerDetailView:UpdateRightState()
|
|
self.roleInfo:SetActive(self.rightState == PlayerDetailView.State.Equip or
|
|
self.rightState == PlayerDetailView.State.Fashion)
|
|
self.roleBord:SetActive(self.rightState == PlayerDetailView.State.Equip or
|
|
self.rightState == PlayerDetailView.State.Fashion)
|
|
self.roleEquips:SetActive(self.rightState == PlayerDetailView.State.Equip);
|
|
self.playerAttriHolder:SetActive(self.rightState == PlayerDetailView.State.Attri);
|
|
self.roleFashions:SetActive(self.rightState == PlayerDetailView.State.Fashion)
|
|
end
|
|
|
|
function PlayerDetailView:SetPlayerModelTex( )
|
|
if(self.playerData)then
|
|
local parts = Asset_Role.CreatePartArray();
|
|
|
|
local userdata = self.playerData.userdata;
|
|
local partIndex = Asset_Role.PartIndex;
|
|
local partIndexEx = Asset_Role.PartIndexEx;
|
|
parts[partIndex.Body] = userdata:Get(UDEnum.BODY) or 0;
|
|
parts[partIndex.Hair] = userdata:Get(UDEnum.HAIR) or 0;
|
|
parts[partIndex.LeftWeapon] = userdata:Get(UDEnum.LEFTHAND) or 0;
|
|
parts[partIndex.RightWeapon] = userdata:Get(UDEnum.RIGHTHAND) or 0;
|
|
parts[partIndex.Head] = userdata:Get(UDEnum.HEAD) or 0;
|
|
parts[partIndex.Wing] = userdata:Get(UDEnum.BACK) or 0;
|
|
parts[partIndex.Face] = userdata:Get(UDEnum.FACE) or 0;
|
|
parts[partIndex.Tail] = userdata:Get(UDEnum.TAIL) or 0;
|
|
parts[partIndex.Eye] = userdata:Get(UDEnum.EYE) or 0;
|
|
parts[partIndex.Mount] = 0
|
|
parts[partIndex.Mouth] = userdata:Get(UDEnum.MOUTH) or 0;
|
|
|
|
parts[partIndexEx.Gender] = userdata:Get(UDEnum.SEX) or 0;
|
|
parts[partIndexEx.HairColorIndex] = userdata:Get(UDEnum.HAIRCOLOR) or 0;
|
|
parts[partIndexEx.EyeColorIndex] = userdata:Get(UDEnum.EYECOLOR) or 0;
|
|
parts[partIndexEx.BodyColorIndex] = userdata:Get(UDEnum.CLOTHCOLOR) or 0;
|
|
|
|
UIModelUtil.Instance:SetRoleModelTexture(self.roleTex, parts, UIModelCameraTrans.Team)
|
|
|
|
Asset_Role.DestroyPartArray(parts);
|
|
end
|
|
end
|
|
|
|
function PlayerDetailView:UpdatePlayerRoleEquips()
|
|
local equipdata = self.playerEquipDatas;
|
|
if(self.playerRoleEquip)then
|
|
for i=1,#self.playerRoleEquip do
|
|
local equipCell = self.playerRoleEquip[i];
|
|
equipCell:SetData(equipdata[i]);
|
|
end
|
|
end
|
|
end
|
|
|
|
function PlayerDetailView:UpdateRoleInfo()
|
|
local str = self.playerData.name;
|
|
local guildData = self.playerData:GetGuildData();
|
|
if(guildData)then
|
|
str = string.format("%s<%s>", str, guildData.name)
|
|
end
|
|
self.playerName.text = str;
|
|
|
|
local partner = self.playerData_partner;
|
|
|
|
if(partner and partner~="")then
|
|
self.partnerName.gameObject:SetActive(true);
|
|
self.partnerName.text = string.format(ZhString.PlayerDetailView_PartnerName, partner);
|
|
else
|
|
self.partnerName.gameObject:SetActive(false);
|
|
end
|
|
end
|
|
|
|
function PlayerDetailView:UpdateMyRoleEquips()
|
|
-- 更新人物裝備
|
|
local equipdata = BagProxy.Instance.roleEquip.siteMap;
|
|
for i = 1,#self.myRoleEquip do
|
|
self.myRoleEquip[i]:SetData(equipdata[i]);
|
|
end
|
|
end
|
|
|
|
function PlayerDetailView:UpdatePlayerRoleFashions()
|
|
local fashiondata = self.playerFashionDatas;
|
|
for i = 1, #PackageEquip_FashionParts do
|
|
local index = PackageEquip_FashionParts[i];
|
|
if(self.fashionEquips[index])then
|
|
self.fashionEquips[index]:SetData(fashiondata[index]);
|
|
end
|
|
end
|
|
end
|
|
|
|
function PlayerDetailView:CreatePlayerData( serverData )
|
|
self:DestroyPlayerData();
|
|
|
|
self.playerData = PlayerData.CreateAsTable( serverData )
|
|
|
|
self.playerData.name = serverData.name;
|
|
|
|
local datas = serverData.datas;
|
|
if(datas)then
|
|
for i = 1, #datas do
|
|
local celldata = datas[i];
|
|
if celldata ~= nil then
|
|
self.playerData.userdata:SetByID(celldata.type, celldata.value, celldata.data)
|
|
end
|
|
end
|
|
end
|
|
|
|
local attrs = serverData.attrs;
|
|
if(attrs)then
|
|
for i = 1, #attrs do
|
|
local cellAttri = attrs[i];
|
|
if cellAttri ~= nil then
|
|
self.playerData.props:SetValueById(cellAttri.type, cellAttri.value)
|
|
end
|
|
end
|
|
end
|
|
|
|
local tempArray = ReusableTable.CreateArray();
|
|
tempArray[1] = serverData.guildid;
|
|
tempArray[2] = serverData.guildname;
|
|
tempArray[3] = serverData.guildportrait;
|
|
tempArray[4] = serverData.guildjob;
|
|
self.playerData:SetGuildData(tempArray);
|
|
ReusableTable.DestroyArray(tempArray);
|
|
|
|
self:InitFashionCtl(self.playerData.userdata:Get(UDEnum.PROFESSION))
|
|
end
|
|
|
|
function PlayerDetailView:DestroyPlayerData( )
|
|
if(self.playerData)then
|
|
self.playerData:Destroy();
|
|
self.playerData = nil;
|
|
end
|
|
end
|
|
|
|
function PlayerDetailView:UpdateViewInfo(dataInfo)
|
|
if(dataInfo)then
|
|
self:CreatePlayerData( dataInfo );
|
|
|
|
self.playerEquipDatas = {};
|
|
if(dataInfo.equip)then
|
|
for i=1,#dataInfo.equip do
|
|
local itemdata = ItemData.new();
|
|
TableUtil.Print(dataInfo.equip[i])
|
|
itemdata:ParseFromServerData(dataInfo.equip[i]);
|
|
if(itemdata.index)then
|
|
self.playerEquipDatas[itemdata.index] = itemdata;
|
|
end
|
|
end
|
|
end
|
|
|
|
self.playerFashionDatas = {};
|
|
if(dataInfo.fashion)then
|
|
for i=1,#dataInfo.fashion do
|
|
local itemdata = ItemData.new();
|
|
TableUtil.Print(dataInfo.fashion[i])
|
|
itemdata:ParseFromServerData(dataInfo.fashion[i]);
|
|
if(itemdata.index)then
|
|
self.playerFashionDatas[itemdata.index] = itemdata;
|
|
end
|
|
end
|
|
end
|
|
|
|
self.playerAttriView:SetPlayer(self.playerData);
|
|
self.playerData_partner = dataInfo.partner;
|
|
end
|
|
self:SetPlayerModelTex();
|
|
self:UpdatePlayerRoleEquips();
|
|
self:UpdatePlayerRoleFashions();
|
|
self:UpdateRoleInfo();
|
|
|
|
self:UpdateMyRoleEquips();
|
|
self:CameraRotateToMe();
|
|
end
|
|
|
|
function PlayerDetailView:OnEnter()
|
|
PlayerDetailView.super.OnEnter(self);
|
|
|
|
local dataInfo = self.viewdata.viewdata and self.viewdata.viewdata.dataInfo;
|
|
if(dataInfo)then
|
|
self:UpdateViewInfo(dataInfo);
|
|
else
|
|
self:CloseSelf();
|
|
end
|
|
|
|
self.myBaseAttriView:OnEnter();
|
|
self.myBaseAttriView:HideHelpBtn();
|
|
|
|
self.playerAttriView:OnEnter();
|
|
self.playerAttriView:HideHelpBtn();
|
|
|
|
end
|
|
|
|
function PlayerDetailView:OnExit()
|
|
PlayerDetailView.super.OnExit(self);
|
|
|
|
self:CameraReset();
|
|
self:DestroyPlayerData();
|
|
end
|