2025-06-04 05:02:57 +08:00

527 lines
16 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

MainViewHeadPage = class("MainViewHeadPage",SubView)
autoImport("PlayerFaceCell");
autoImport("TargetHeadCell");
autoImport("PetHeadCell");
autoImport("BeingHeadCell");
autoImport("GuildVoiceCell");
function MainViewHeadPage:Init()
self:InitUI();
self:MapInterestEvent();
self:UpdateMyHead();
self:UpdateMyHeadTeaminfo();
self:RegistRedTip();
end
function MainViewHeadPage:InitUI()
local headContainer = self:FindChild("MyHeadContainer");
self.headCellObj = self:LoadPreferb("cell/PlayerHeadCell", headContainer);
self.headCellObj.transform.localPosition = Vector3.zero
self:AddOrRemoveGuideId(self.headCellObj, 101);
self.myHeadCell = PlayerFaceCell.new(self.headCellObj);
self.myHeadCell:SetMinDepth(40);
self.myHeadCell:AddEventListener(MouseEvent.MouseClick, self.clickMyHead, self);
self.myHeadData = HeadImageData.new();
local chooseTarget = self:FindChild("ChooseTargets");
local targetCellObj = self:LoadPreferb("cell/TargetHeadCell", chooseTarget);
self.targetHeadCell = TargetHeadCell.new(targetCellObj);
self.targetHeadCell:SetMinDepth(40);
self.targetHeadCell:AddEventListener(TargetHeadEvent.CancelChoose, self.CancelChooseTarget, self);
self.targetHeadCell:AddEventListener(MouseEvent.MouseClick, self.clickTargetCell, self);
self.targetHeadCell:SetData();
self.playerTipStick = self:FindComponent("PlayerTipStick", UIWidget);
self.petTipStick = self:FindComponent("PetTipStick", UIWidget);
self.headGrid = self:FindComponent("HeadGrid", UIGrid);
self.petHeadActive = self:FindGO("PetHeadActive");
self.beingHeadActive = self:FindGO("BeingHeadActive");
local petHeadObj1 = self:LoadPreferb("cell/PetHeadCell", self:FindGO("PetHeadContainer"));
self.petHeadCell1 = PetHeadCell.new(petHeadObj1);
self.petHeadCell1:SetMinDepth(40);
self.petHeadCell1:AddEventListener(MouseEvent.MouseClick, self.clickPetHeadCell1, self);
local petHeadObj2 = self:LoadPreferb("cell/PetHeadCell", self:FindGO("PetHeadContainer"));
self.petHeadCell2 = PetHeadCell.new(petHeadObj2);
self.petHeadCell2:SetMinDepth(40);
self.petHeadCell2:AddEventListener(MouseEvent.MouseClick, self.clickPetHeadCell2, self);
self.beingContainer = self:FindGO("BeingHeadContainer");
local headObj = self:LoadPreferb("cell/PetHeadCell", self.beingContainer);
self.beingHeadCell = BeingHeadCell.new(headObj);
self.beingHeadCell:SetMinDepth(40);
self.beingHeadCell:AddEventListener(MouseEvent.MouseClick, self.clickBeingCell, self);
self.VoiceGrid = self:FindGO("VoiceGrid");
if self.VoiceGrid then
self.VoiceGrid.gameObject:SetActive(false)
self.VoiceGridVoiceCell1 = self:FindGO("VoiceCell1",self.VoiceGrid);
self.VoiceGridVoiceCell2 = self:FindGO("VoiceCell2",self.VoiceGrid);
self.VoiceGridVoiceCell3 = self:FindGO("VoiceCell3",self.VoiceGrid);
self.VoiceCell1 = GuildVoiceCell.new(self.VoiceGridVoiceCell1)
self.VoiceCell2 = GuildVoiceCell.new(self.VoiceGridVoiceCell2)
self.VoiceCell3 = GuildVoiceCell.new(self.VoiceGridVoiceCell3)
self.VoiceGridVoiceCell1.gameObject:SetActive(false)
self.VoiceGridVoiceCell2.gameObject:SetActive(false)
self.VoiceGridVoiceCell3.gameObject:SetActive(false)
self.VoiceCellTable = {}
table.insert(self.VoiceCellTable,self.VoiceCell1)
table.insert(self.VoiceCellTable,self.VoiceCell2)
table.insert(self.VoiceCellTable,self.VoiceCell3)
end
end
function MainViewHeadPage:RegistRedTip()
local headSprite = self:FindComponent("Frame", UISprite, self.headCellObj);
self:RegisterRedTipCheck(SceneTip_pb.EREDSYS_ADD_POINT , headSprite, 42, {-9, -9});
self:RegisterRedTipCheck(SceneTip_pb.EREDSYS_NEW_PROFESSION , headSprite, 42, {-9, -9});
self:RegisterRedTipCheck(SceneTip_pb.EREDSYS_PROFESSION_UP , headSprite, 42, {-9, -9});
self:RegisterRedTipCheck(SceneTip_pb.EREDSYS_MONSTER_IMG , headSprite, 42, {-9, -9});
end
function MainViewHeadPage:clickMyHead()
self:sendNotification(UIEvent.JumpPanel,{view = PanelConfig.Charactor});
end
function MainViewHeadPage:clickTargetCell(cellctl)
if(self.targetId)then
local creature = SceneCreatureProxy.FindCreature(self.targetId);
if(creature and creature:GetCreatureType() == Creature_Type.Player)then
local playerData = PlayerTipData.new();
playerData:SetByCreature(creature);
if(not self.playerTipShow)then
self.playerTipShow = true;
local playerTip = FunctionPlayerTip.Me():GetPlayerTip(self.playerTipStick, NGUIUtil.AnchorSide.Right, {-20,0});
local tipData = {
playerData = playerData,
};
tipData.funckeys = FunctionPlayerTip.Me():GetPlayerFunckey(self.targetId);
table.insert(tipData.funckeys, "Double_Action")
table.insert(tipData.funckeys, "Booth")
playerTip:SetData(tipData);
playerTip.closecallback = function (go)
self.playerTipShow = false;
end
else
FunctionPlayerTip.Me():CloseTip();
self.playerTipShow = false;
end
end
end
end
function MainViewHeadPage:CancelChooseTarget()
if(not Game.AutoBattleManager.on)then
Game.Myself:Client_LockTarget(nil);
end
end
function MainViewHeadPage:clickPetHeadCell1()
if(self.petHeadCell1.restTip.activeSelf)then
return;
end
local index = 0;
for _, myPetInfo in pairs(PetProxy.Instance.myPetsMap) do
index = index + 1
if( index == 1 and myPetInfo)then
if(not self.petTipShow)then
local playerData = PlayerTipData.new();
playerData:SetByPetInfoData(myPetInfo);
FunctionPet.Me():ShowPetTip(playerData, function (go)
self.petTipShow = false;
end, self.petTipStick, NGUIUtil.AnchorSide.Right, {-20,9})
else
FunctionPlayerTip.Me():CloseTip();
self.petTipShow = false;
end
end
end
end
function MainViewHeadPage:clickPetHeadCell2()
if(self.petHeadCell2.restTip.activeSelf)then
return;
end
local index = 0;
for _, myPetInfo in pairs(PetProxy.Instance.myPetsMap) do
index = index + 1
if( index == 2 and myPetInfo)then
if(not self.petTipShow)then
local playerData = PlayerTipData.new();
playerData:SetByPetInfoData(myPetInfo);
FunctionPet.Me():ShowPetTip(playerData, function (go)
self.petTipShow = false;
end, self.petTipStick, NGUIUtil.AnchorSide.Right, {-20,9})
else
FunctionPlayerTip.Me():CloseTip();
self.petTipShow = false;
end
end
end
end
function MainViewHeadPage:clickBeingCell(cell)
local data = cell.data;
if(data == nil)then
return;
end
local beingid = cell.data.beingid;
local beingInfo = PetProxy.Instance:GetMySummonBeingInfo(beingid)
if(beingInfo == nil)then
return;
end
if(not self.beingNpcShow)then
self.beingNpcShow = true;
local playerData = PlayerTipData.new();
playerData:SetByBeingInfoData(beingInfo);
local playerTip = FunctionPlayerTip.Me():GetPlayerTip(cell.bgSp, NGUIUtil.AnchorSide.TopRight, {-20, 0});
local tipData = {
playerData = playerData,
};
tipData.funckeys = { "Pet_CallBack","Pet_ShowDetail","Pet_AutoFight" };
playerTip:SetData(tipData);
playerTip.closecallback = function (go)
self.beingNpcShow = false;
end
local s1 = string.format(ZhString.MainViewHeadPage_Name, beingInfo.name);
local s2 = string.format(ZhString.MainViewHeadPage_Master, Game.Myself.data.name);
playerTip:SetDesc(s1, s2, "");
else
FunctionPlayerTip.Me():CloseTip();
self.beingNpcShow = false;
end
end
function MainViewHeadPage:UpdateMyHead()
self.myHeadData:Reset();
self.myHeadData:TransformByCreature(Game.Myself);
self.myHeadCell:SetData(self.myHeadData);
end
function MainViewHeadPage:UpdateMyHeadTeaminfo(note)
if(TeamProxy.Instance:IHaveTeam())then
local imageUserId = TeamProxy.Instance:GetItemImageUser();
self.myHeadCell.symbols:Active(PlayerFaceCell_SymbolType.ImageCreate, imageUserId == Game.Myself.data.id);
local myMemberData = TeamProxy.Instance:GetMyTeamMemberData();
self.myHeadCell:SetTeamLeaderSymbol(myMemberData and myMemberData.job);
else
self.myHeadCell.symbols:Active(PlayerFaceCell_SymbolType.ImageCreate, false);
self.myHeadCell:SetTeamLeaderSymbol(false);
end
end
function MainViewHeadPage:UpdateTargetHeadCell(creatureId)
self.targetId = creatureId;
local creature = SceneCreatureProxy.FindCreature(creatureId);
if(not creature)then
self.targetHeadCell:ActiveCell(false);
return;
end
if(creature.data and creature.data.IsCatchNpc_Detail and creature.data:IsCatchNpc_Detail())then
self.targetHeadCell:ActiveCell(false);
return;
end
local headData = HeadImageData.new();
headData:TransformByCreature(creature);
if(headData.hide)then
self.targetHeadCell:ActiveCell(false);
return;
end
self.targetHeadCell:ActiveCell(true);
if(creature:GetCreatureType() == Creature_Type.Npc)then
-- if(creature.data:IsMonster() and not creature.data:IsPet())then
-- -- 無限塔的怪物等級特殊顯示
-- local monsterData = creature.data.staticData;
-- if(monsterData.Zone~="EndlessTower")then
-- headData.level = creature.data.userdata:Get(UDEnum.ROLELEVEL) or monsterData.Level;
-- end
-- end
if(creature.data:IsMonster())then
local monsterData = creature.data.staticData;
if(monsterData.Zone~="EndlessTower")then
headData.level = creature.data.userdata:Get(UDEnum.ROLELEVEL) or monsterData.Level;
end
end
self.targetHeadCell:SetData(headData);
elseif(creature:GetCreatureType() == Creature_Type.Pet)then
self.targetHeadCell:ActiveCell(false);
elseif(creature:GetCreatureType() == Creature_Type.Player)then
-- 玩家請求玩家資訊
self.targetHeadCell:SetData(headData);
ServiceNUserProxy.Instance:CallQueryUserInfoUserCmd(creature.data.id)
end
self.headGrid:Reposition();
end
function MainViewHeadPage:UpdatePetHeadCell()
local index = 0;
local length = TableUtil.TableLength(PetProxy.Instance.myPetsMap)
if length == 0 then
self.petHeadCell1:SetData(nil)
self.petHeadCell2:SetData(nil)
else
if length == 1 then
self.petHeadCell2:SetData(nil);
end
for _, myPetInfo in pairs(PetProxy.Instance.myPetsMap) do
index = index + 1
if index == 1 then
if(myPetInfo == nil)then
self.petHeadCell1:SetData(nil);
else
self.petHeadCell1:SetData(myPetInfo);
self.headGrid:Reposition();
end
end
if index == 2 then
if(myPetInfo == nil)then
self.petHeadCell2:SetData(nil);
else
self.petHeadCell2:SetData(myPetInfo);
self.headGrid:Reposition();
end
end
end
end
end
function MainViewHeadPage:UpdateBeingHeadCell()
local myBeingInfo = PetProxy.Instance:GetMySummonBeingInfo();
self.beingContainer:SetActive(myBeingInfo ~= nil);
self.beingHeadCell:SetData(myBeingInfo);
self.headGrid:Reposition();
end
function MainViewHeadPage:MapInterestEvent()
self:AddListenEvt(CreatureEvent.Name_Change, self.HandleNameChange);
self:AddListenEvt(MyselfEvent.TransformChange, self.UpdateMyHead);
self:AddListenEvt(ServiceEvent.SessionTeamEnterTeam, self.UpdateMyHead);
self:AddListenEvt(ServiceEvent.SessionTeamMemberDataUpdate, self.UpdateMyHeadTeaminfo);
self:AddListenEvt(ServiceEvent.SessionTeamExitTeam, self.UpdateMyHeadTeaminfo);
self:AddListenEvt(MyselfEvent.MyDataChange, self.HandleMyDataChange);
self:AddListenEvt(ServiceEvent.NUserQueryUserInfoUserCmd, self.HandleUpdatePlayerHead);
self:AddListenEvt(MyselfEvent.BaseExpChange, self.HandleUpdateMyHpMp);
self:AddListenEvt(MyselfEvent.MyPropChange, self.HandleUpdateMyHpMp);
self:AddListenEvt(SceneCreatureEvent.PropHpChange, self.HandleUpdateMyHpMp)
self:AddListenEvt(ServiceEvent.ScenePetPetInfoUpdatePetCmd, self.UpdatePetHeadCell);
self:AddListenEvt(ServiceEvent.ScenePetPetInfoPetCmd, self.UpdatePetHeadCell);
self:AddListenEvt(ServiceEvent.ScenePetPetOffPetCmd, self.UpdatePetHeadCell);
self:AddListenEvt(ServiceEvent.SceneBeingBeingInfoQuery, self.UpdateBeingHeadCell);
self:AddListenEvt(ServiceEvent.SceneBeingBeingInfoUpdate, self.UpdateBeingHeadCell);
self:AddListenEvt(ServiceEvent.SceneBeingBeingOffCmd, self.UpdateBeingHeadCell);
self:AddListenEvt(PVPEvent.PVP_PoringFightLaunch, self.HandlePoringFightBegin);
self:AddListenEvt(PVPEvent.PVP_PoringFightShutdown, self.HandlePoringFightEnd);
self:AddListenEvt(MyselfEvent.SelectTargetChange, self.HandleTargetChange);
EventManager.Me():AddEventListener(MyselfEvent.Pet_HpChange, self.HandlePetHpChange, self)
EventManager.Me():AddEventListener(SceneCreatureEvent.CreatureRemove, self.HandleCreatureRemove, self)
EventManager.Me():AddEventListener(MyselfEvent.VoiceChange,self.VoiceChange, self)
EventManager.Me():AddEventListener(GuildEvent.VoiceChange,self.GuildEventVoiceChange, self)
end
function MainViewHeadPage:VoiceChange(note)
if note then
self.myHeadCell:UpdateVoice(note.showMic)
else
self.myHeadCell:UpdateVoice(nil)
end
end
function MainViewHeadPage:GuildEventVoiceChange(note)
if note == nil then
self.VoiceGrid.gameObject:SetActive(false)
do return end
end
if not self.VoiceGrid.gameObject.activeInHierarchy then
self.VoiceGrid.gameObject:SetActive(true)
end
local myGuildData = GuildProxy.Instance.myGuildData
if(myGuildData)then
local memberData = myGuildData:GetMemberByGuid(tonumber(note.userId))
if(memberData)then
for k,v in pairs(self.VoiceCellTable) do
if note.showMic == true then
if v.bVoiceOpen == false then
v:ShowMic(memberData.name,memberData.id)
break
elseif v.bVoiceOpen == true and v.id == memberData.id then
break
end
else
--找一樣的id
if v.id == memberData.id then
v:HideMicAndDisappear()
break
end
end
end
end
end
end
function MainViewHeadPage:HandlePoringFightBegin(note)
self.petHeadActive:SetActive(false);
self.beingHeadActive:SetActive(false);
end
function MainViewHeadPage:HandlePoringFightEnd(note)
self.petHeadActive:SetActive(true);
self.beingHeadActive:SetActive(true);
end
function MainViewHeadPage:HandleNameChange(note)
local creature = note.body;
if(creature and creature.data.id == Game.Myself.data.id)then
self:UpdateMyHead();
end
end
function MainViewHeadPage:HandleMyDataChange(note)
self:UpdateMyHead();
if(self.targetId)then
self.targetHeadCell:RefreshLevelColor();
end
end
function MainViewHeadPage:HandleUpdatePlayerHead(note)
local playerid = note.body.charid;
if(playerid and self.targetId == playerid)then
local creature = SceneCreatureProxy.FindCreature(playerid);
local headData = HeadImageData.new();
headData:TransformByCreature(creature);
self.targetHeadCell:SetData(headData);
end
end
function MainViewHeadPage:HandleUpdateMyHpMp(note)
local props = Game.Myself.data.props;
if(props~=nil)then
local hp = props.Hp:GetValue()
local maxhp = props.MaxHp:GetValue()
if(self.myHeadCell~=nil)then
local value = 0
if(hp ~= 0 or maxhp ~= 0)then
value = hp/maxhp;
end
self.myHeadCell:UpdateHp(value);
end
local mp = props.Sp:GetValue()
local maxMp = props.MaxSp:GetValue();
if(self.myHeadCell~=nil)then
local value = 0
if(mp ~= 0 or maxMp ~= 0)then
value = mp/maxMp;
end
self.myHeadCell:UpdateMp(value);
end
end
end
function MainViewHeadPage:HandlePetHpChange(creature)
if(creature == nil)then
return;
end
local index = 0;
for _, npet in pairs(PetProxy.Instance.myPetsMap) do
index = index + 1
if index == 1 then
if(npet and creature.data.id == npet.guid)then
self.petHeadCell1:UpdateHp();
end
end
if index == 2 then
if(npet and creature.data.id == npet.guid)then
self.petHeadCell2:UpdateHp();
end
end
end
local being = PetProxy.Instance:GetMySummonBeingInfo();
if(being and creature.data.id == being.guid)then
self.beingHeadCell:UpdateBeingHp();
end
end
function MainViewHeadPage:HandleTargetChange(note)
local nowId = note.body and note.body.data.id;
if(self.targetId ~= nowId)then
self:UpdateTargetHeadCell(nowId);
end
end
function MainViewHeadPage:HandleCreatureRemove(evt)
if(evt.data and self.targetId == evt.data)then
self:UpdateTargetHeadCell(nil);
end
end
function MainViewHeadPage:OnEnter()
MainViewHeadPage.super.OnEnter(self);
self.myHeadCell:AddIconEvent();
self:UpdatePetHeadCell();
self:UpdateBeingHeadCell();
end
function MainViewHeadPage:OnExit()
self.myHeadCell:RemoveIconEvent();
MainViewHeadPage.super.OnExit(self);
end