527 lines
16 KiB
Plaintext
527 lines
16 KiB
Plaintext
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
|
||
|