ro-table/Assets/Resources/Script/FrameWork/GUI/view/RaidEnterWaitView.txt
2025-06-04 05:12:01 +08:00

238 lines
5.1 KiB
Plaintext

autoImport("ContainerView");
RaidEnterWaitView = class("RaidEnterWaitView",ContainerView)
RaidEnterWaitView.ViewType = UIViewType.PopUpLayer
autoImport("CarrierWaitListCell");
-- 靜態方法設定參數很麻煩。。。。
local evts = {};
function RaidEnterWaitView.SetListenEvent( evtname, evt )
evts[evtname] = evt;
end
local startFunc;
function RaidEnterWaitView.SetStartFunc(func)
startFunc = func;
end
local cancelFunc;
function RaidEnterWaitView.SetCancelFunc(func)
cancelFunc = func;
end
local allApplyFunc;
function RaidEnterWaitView.SetAllApplyCall(func)
allApplyFunc = func;
end
local preactive_start
function RaidEnterWaitView.PreActiveButton_Start(b)
preactive_start = b;
end
local preactive_cancel
function RaidEnterWaitView.PreActiveButton_Cancel(b)
preactive_cancel = b;
end
local preenable_start
function RaidEnterWaitView.PreEnableButton_Start(b)
preenable_start = b;
end
local preenable_cancel
function RaidEnterWaitView.PreEnableButton_Cancel(b)
preenable_cancel = b;
end
local ClearLocalParam = function ()
TableUtility.TableClear(evts);
startFunc = nil;
cancelFunc = nil;
preactive_start = nil;
preactive_cancel = nil;
pregrey_start = nil;
pregrey_cancel = nil;
allApplyFunc = nil;
end
function RaidEnterWaitView:Init()
self.cache_value = {};
self:InitView();
self:MapEvent();
end
function RaidEnterWaitView:InitView()
self.waitCell = self:LoadPreferb("cell/WaitCell", self.gameObject);
self.waitCell.transform.localPosition = LuaVector3.zero;
local waitGrid = self:FindGO("WaitList"):GetComponent(UIGrid)
self.waitList = ListCtrl.new(waitGrid, CarrierWaitListCell, "CarrierWaitListCell")
self.startBtn = self:FindGO("StartBtn")
self.cancelBtn = self:FindGO("CancelBtn")
self:AddClickEvent(self.startBtn, function(go)
if(startFunc)then
startFunc(self)
end
end)
self:AddClickEvent(self.cancelBtn,function(go)
if(cancelFunc)then
cancelFunc(self)
end
end)
self.buttonGrid = self:FindComponent("ButtonGrid", UIGrid);
end
function RaidEnterWaitView:PreUpdateButtons()
if(preactive_start ~= nil)then
self:ActiveButton_Start(preactive_start);
end
if(preactive_cancel ~= nil)then
self:ActiveButton_Cancel(preactive_cancel);
end
if(preenable_start ~= nil)then
self:EnableButton_Start(preenable_start);
end
if(preenable_cancel ~= nil)then
self:EnableButton_Cancel(preenable_cancel);
end
end
function RaidEnterWaitView:MapEvent()
self:AddListenEvt(TeamEvent.MemberEnterTeam, self.UpdateWaitList);
self:AddListenEvt(TeamEvent.MemberExitTeam, self.UpdateWaitList);
if(evts == nil)then
return;
end
for k, v in pairs(evts)do
local func = function(view_self, note)
v(view_self, note)
end
self:AddListenEvt(k, func);
end
end
function RaidEnterWaitView:UpdateWaitList(defaultValue)
local myTeam = TeamProxy.Instance.myTeam;
if(myTeam == nil)then
return;
end
local members = myTeam:GetPlayerMemberList(true, true);
self.datas = {};
local myid = Game.Myself.data.id;
local m;
for i=1,#members do
m = members[i];
local tdata = {};
tdata.name = m.name;
if(self.summoned_map and self.summoned_map[m.id])then
tdata.summon = 1;
end
if(self.cache_value[m.id] == nil)then
if(myid == m.id)then
tdata.agree = true;
else
tdata.agree = defaultValue;
end
else
tdata.agree = self.cache_value[m.id];
end
table.insert(self.datas, tdata)
end
self.waitList:ResetDatas(self.datas);
self:CheckCallAllApplyFunc();
end
function RaidEnterWaitView:UpdateMemberEnterState(memberid, state)
self.cache_value[memberid] = state;
self:CheckCallAllApplyFunc();
end
function RaidEnterWaitView:ActiveSummonedInfo(memberid)
if(self.summoned_map == nil)then
self.summoned_map = {};
end
self.summoned_map[memberid] = true;
end
function RaidEnterWaitView:CheckCallAllApplyFunc()
if(allApplyFunc == nil)then
return;
end
local myTeam = TeamProxy.Instance.myTeam;
if(myTeam == nil)then
return;
end
local members = myTeam:GetPlayerMemberList(true, true);
local allApply = true;
local m;
for i=1,#members do
m = members[i];
if(not self.cache_value[m.id])then
allApply = false;
break;
end
end
if(hasValue and allApply)then
allApplyFunc(self);
allApplyFunc = nil;
end
end
function RaidEnterWaitView:OnEnter()
RaidEnterWaitView.super.OnEnter(self);
self:UpdateWaitList();
self:PreUpdateButtons();
end
function RaidEnterWaitView:ActiveButton_Start(b)
self.startBtn:SetActive(b);
self.buttonGrid.repositionNow = true;
end
function RaidEnterWaitView:ActiveButton_Cancel(b)
self.cancelBtn:SetActive(b);
self.buttonGrid.repositionNow = true;
end
function RaidEnterWaitView:EnableButton_Start(b)
self:SetTextureGrey(self.startBtn, b);
self.startBtn:GetComponent(BoxCollider).enabled = b;
end
function RaidEnterWaitView:EnableButton_Cancel(b)
if(b)then
self:SetTextureWhite(self.cancelBtn, ColorUtil.NGUILabelBlueBlack);
else
self:SetTextureGrey(self.cancelBtn);
end
self.cancelBtn:GetComponent(BoxCollider).enabled = b;
end
function RaidEnterWaitView:OnExit()
RaidEnterWaitView.super.OnExit(self);
helplog("OnExit");
TableUtility.TableClear(self.cache_value);
ClearLocalParam();
end