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

279 lines
8.2 KiB
Plaintext

local BaseCell = autoImport("BaseCell");
TeamMemberCell = class("TeamMemberCell", BaseCell)
autoImport("PlayerFaceCell");
function TeamMemberCell:Init()
local portrait = self:FindGO("TeamPortrait");
self.portraitCell = PlayerFaceCell.new(portrait);
self.portraitCell:AddEventListener(MouseEvent.MouseClick, self.ClickHead, self);
self.portraitCell:SetMinDepth(4);
self.lv = self:FindComponent("Lv", UILabel);
self.name = self:FindComponent("Name", UILabel);
self.mapname = self:FindComponent("MapName", UILabel);
self.bg = self:FindComponent("Bg", UISprite);
self.zoneId = self:FindComponent("ZoneId", UILabel);
self.roleTexture = self:FindComponent("RoleTexture", UITexture);
self.restTip = self:FindGO("RestTip");
self.restTime = self:FindComponent("RestTime", UILabel);
self.following = self:FindGO("Following");
self.inviteFollow = self:FindGO("InviteFollow");
self.memberState = self:FindGO("MemberState");
self.addState = self:FindGO("AddState");
self.addButton = self:FindGO("AddButton");
self:AddClickEvent(self.addButton, function ()
self:sendNotification(UIEvent.JumpPanel, {view = PanelConfig.TeamInvitePopUp});
end);
self:AddClickEvent(self.inviteFollow, function ()
if(self.data and self.data ~= MyselfTeamData.EMPTY_STATE)then
FunctionTeam.Me():TryInviteMemberFollow(self.data.id, true);
end
end);
self.cancelInviteFollow = self:FindGO("CancelInviteFollow");
self:AddClickEvent(self.cancelInviteFollow, function (go)
if(self.data and self.data ~= MyselfTeamData.EMPTY_STATE)then
FunctionTeam.Me():TryInviteMemberFollow(self.data.id, false);
end
end);
self:AddIconEvent();
end
function TeamMemberCell:ClickHead()
self:PassEvent(MouseEvent.MouseClick, self);
end
function TeamMemberCell:SetData(data)
self:ActiveCatRestTip(false);
self.data = data;
if(data == MyselfTeamData.EMPTY_STATE)then
self.addState:SetActive(true);
self.memberState:SetActive(false);
elseif(data ~= nil)then
self.addState:SetActive(false);
self.memberState:SetActive(true);
self.lv.text = "Lv."..tostring(data.baselv);
self.name.text = data.name;
local headData = HeadImageData.new();
headData:TransByTeamMemberData(data);
self.portraitCell:SetData(headData);
local isCat = data:IsHireMember();
local isOnline = not data:IsOffline();
local isSameline = data.zoneid==MyselfProxy.Instance:GetZoneId();
if(isCat)then
self.mapname.gameObject:SetActive(true);
self.mapname.text = string.format(ZhString.TeamMemberListPopUp_HireTip, tostring(data.mastername));
else
if(isOnline)then
if(isSameline)then
self.mapname.gameObject:SetActive(true);
local data = data.mapid and Table_Map[data.mapid]
self.mapname.text = data and data.NameZh or "";
else
self.mapname.gameObject:SetActive(false);
end
else
self.mapname.gameObject:SetActive(true);
self.mapname.text = ZhString.TeamMemberCell_Offline;
end
end
if(not isCat and isOnline and not isSameline)then
self.zoneId.gameObject:SetActive(true);
self.zoneId.text = ChangeZoneProxy.Instance:ZoneNumToString(data.zoneid); -- ZhString.TeamMemberCell_line
else
self.zoneId.gameObject:SetActive(false);
end
if(isOnline)then
if(isCat)then
self:UpdateRestTip();
else
self.portraitCell:SetIconActive(true, true)
end
else
self.portraitCell:SetIconActive(false, true)
end
self:UpdateRoleTexture();
end
self:UpdateFollow();
end
-- 待優化
function TeamMemberCell:UpdateRoleTexture()
local parts = Asset_Role.CreatePartArray();
local partIndex = Asset_Role.PartIndex;
local partIndexEx = Asset_Role.PartIndexEx;
if(self.data.id == Game.Myself.data.id)then
local userdata = Game.Myself.data.userdata;
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
else
parts[partIndex.Body] = self.data.body or 0
parts[partIndex.Hair] = self.data.hair or 0
parts[partIndex.LeftWeapon] = self.data.rightWeapon or 0
parts[partIndex.RightWeapon] = self.data.leftWeapon or 0
parts[partIndex.Head] = self.data.head or 0
parts[partIndex.Wing] = self.data.back or 0
parts[partIndex.Face] = self.data.face or 0
parts[partIndex.Tail] = self.data.tail or 0
parts[partIndex.Eye] = self.data.eye or 0
parts[partIndex.Mount] = 0
parts[partIndex.Mouth] = self.data.mouth or 0
parts[partIndexEx.Gender] = self.data.gender or 0
parts[partIndexEx.HairColorIndex] = self.data.haircolor or 0
parts[partIndexEx.BodyColorIndex] = self.data.bodycolor or 0
end
UIModelUtil.Instance:SetRoleModelTexture(self.roleTexture, parts, UIModelCameraTrans.Team)
Asset_Role.DestroyPartArray(parts);
end
function TeamMemberCell:UpdateRestTip()
local resttime, expiretime = 0,0;
if(self.data)then
resttime = self.data.resttime or 0;
expiretime = self.data.expiretime or 0;
end
local curtime = ServerTime.CurServerTime()/1000;
if(expiretime~=0 and curtime >= expiretime)then
self.restTip:SetActive(true);
self.portraitCell:SetIconActive(false);
self.restTime.text = ZhString.TeamMemberCell_Expire;
else
self:ActiveCatRestTip(resttime~=0 and resttime > curtime);
end
end
function TeamMemberCell:ActiveCatRestTip(b)
if(b)then
self.restTip:SetActive(true);
self.portraitCell:SetIconActive(false);
if(not self.restTimeTick)then
self.restTimeTick = TimeTickManager.Me():CreateTick(0, 1000, self.UpdateRestTime, self)
end
else
self.restTip:SetActive(false);
self.portraitCell:SetIconActive(true);
self:RemoveRestTimeTick();
end
end
function TeamMemberCell:UpdateRestTime()
local resttime = self.data and self.data.resttime;
resttime = resttime or 0;
local restSec = resttime - ServerTime.CurServerTime()/1000;
if(restSec > 0)then
local min,sec = ClientTimeUtil.GetFormatSecTimeStr( restSec )
self.restTime.text = ZhString.TeamMemberCell_CatRest .. string.format("%02d:%02d", min , sec)
else
self:ActiveCatRestTip(false);
end
end
function TeamMemberCell:RemoveRestTimeTick()
if(self.restTimeTick)then
TimeTickManager.Me():ClearTick(self, 1)
self.restTimeTick = nil;
end
end
function TeamMemberCell:UpdateFollow()
if(self.data == MyselfTeamData.EMPTY_STATE or self.data == nil)then
self.following:SetActive(false);
self.inviteFollow:SetActive(false);
return;
end
if(not TeamProxy.Instance:CheckIHaveLeaderAuthority())then
self.following:SetActive(false);
self.inviteFollow:SetActive(false);
return;
end
if(self.data:IsHireMember())then
self.following:SetActive(false);
self.inviteFollow:SetActive(false);
return;
end
if(self.data.id == Game.Myself.data.id)then
self.following:SetActive(false);
self.inviteFollow:SetActive(false);
return;
end
if(self.data:IsOffline())then
self.following:SetActive(false);
self.inviteFollow:SetActive(false);
return;
end
local followers = Game.Myself:Client_GetAllFollowers()
if(followers == nil)then
self.following:SetActive(false);
self.inviteFollow:SetActive(false);
return;
end
if(not followers[ self.data.id ])then
self.inviteFollow:SetActive(true);
self.following:SetActive(false);
else
self.inviteFollow:SetActive(false);
self.following:SetActive(true);
end
end
function TeamMemberCell:UpdateMemberPos()
end
function TeamMemberCell:AddIconEvent()
if(self.portraitCell)then
self.portraitCell:AddIconEvent();
end
end
function TeamMemberCell:RemoveIconEvent()
if(self.portraitCell)then
self.portraitCell:RemoveIconEvent();
end
end
function TeamMemberCell:OnRemove()
self:RemoveRestTimeTick();
self:RemoveIconEvent();
end