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

182 lines
4.5 KiB
Plaintext

autoImport("TabView")
BaseView = class("BaseView", TabView)
BaseView.ViewType = UIViewType.NormalBg
function BaseView:ctor(viewObj, viewdata, uiMediator)
BaseView.super.ctor(self, viewObj);
self.viewdata = viewdata;
self.filtersWhenViewOpen = self.viewdata.view and GameConfig.FilterType.UIFilter[self.viewdata.view.id] or nil
-- 建立mediator
-- self.mediatorName = mediatorName or viewdata.viewname;
-- self.uiMediator = UIMediator.new(self.mediatorName, self);
self.uiMediator = uiMediator
self.viewName = viewdata.viewname;
self.disPatherEvt = {};
self:AddCloseButtonEvent();
self:Init();
end
function BaseView:GetShowHideMode()
return PanelShowHideMode.CreateAndDestroy
end
function BaseView:MediatorReActive()
return true
end
function BaseView:Init() end
function BaseView:OnShow() end
function BaseView:OnHide() end
function BaseView:OnEnter()
-- if self.uiMediator ~= nil then
-- GameFacade.Instance:registerMediator(self.uiMediator);
-- end
if(self.filtersWhenViewOpen~=nil) then
FunctionSceneFilter.Me():StartFilter(self.filtersWhenViewOpen);
end
if(self.disPatherEvt~=nil)then
for evt,func in pairs(self.disPatherEvt) do
EventManager.Me():AddEventListener(evt, func, self);
end
end
-- isNpcFunc
local viewdata = self.viewdata and self.viewdata.viewdata;
if(type(viewdata) == "table")then
local isNpcFuncView = viewdata.isNpcFuncView;
if(isNpcFuncView)then
FunctionVisitNpc.Me():AddVisitRef()
end
end
end
function BaseView:OnExit()
-- if self.uiMediator ~= nil then
-- GameFacade.Instance:removeMediator(self.mediatorName);
-- end
self:UnRegisterRedTipChecks()
if(self.filtersWhenViewOpen~=nil) then
FunctionSceneFilter.Me():EndFilter(self.filtersWhenViewOpen);
end
if(self.disPatherEvt~=nil)then
for evt,func in pairs(self.disPatherEvt) do
EventManager.Me():RemoveEventListener(evt, func,self);
end
self.disPatherEvt = nil;
end
--handle the guide quest
if(self.ViewType)then
local list = GuideProxy.Instance:getGuideListByViewName(self.__cname)
-- printRed("BaseView:OnExit viewName:"..self.__cname)
if(list)then
FunctionGuide.Me():checkGuideStateWhenExit(list)
end
end
-- isNpcFunc
local viewdata = self.viewdata and self.viewdata.viewdata;
if(type(viewdata) == "table")then
local isNpcFuncView = viewdata.isNpcFuncView;
if(isNpcFuncView)then
FunctionVisitNpc.Me():RemoveVisitRef()
end
end
end
function BaseView:RegisterRedTipCheck(id,uiwidget,depth,offset,side)
self.RedTipChecks = self.RedTipChecks or {}
local checks = self.RedTipChecks[id]
if(not checks) then
checks = {}
self.RedTipChecks[id] = checks
end
if(checks[uiwidget]==nil) then
checks[uiwidget] = uiwidget
RedTipProxy.Instance:RegisterUI(id,uiwidget,depth,offset,side)
end
end
function BaseView:RegisterRedTipCheckByIds( ids,uiwidget,depth,offset,side)
-- body
if(ids)then
for i=1,#ids do
self:RegisterRedTipCheck(ids[i],uiwidget,depth,offset,side)
end
end
end
function BaseView:UnRegisterRedTipChecks()
if(self.RedTipChecks) then
for k,v in pairs(self.RedTipChecks) do
for kui,vui in pairs(v) do
RedTipProxy.Instance:UnRegisterUI(k,vui)
end
end
self.RedTipChecks = nil
end
end
function BaseView:AddCloseButtonEvent()
self:AddButtonEvent("CloseButton", function (go)
self:CloseSelf();
end);
end
function BaseView:CloseSelf()
-- self:sendNotification(UIEvent.CloseUI,self.ViewType)
self:sendNotification(UIEvent.CloseUI,self)
end
-- 新增監聽事件
function BaseView:AddListenEvt(interest, func)
if(interest)then
self.interests = self.interests or {};
table.insert(self.interests, interest);
self.ListenerEvtMap = self.ListenerEvtMap or {};
self.ListenerEvtMap[interest] = func;
else
printRed("Event name is nil");
end
end
-- 新增EventManager的監聽事件
function BaseView:AddDispatcherEvt(evtname, func)
self.disPatherEvt = self.disPatherEvt or {};
self.disPatherEvt[evtname] = func;
end
-- 使用 uimediator 發送訊息
function BaseView:sendNotification(notificationName, body, type)
self.uiMediator:sendNotification(notificationName, body, type);
end
function BaseView:GotoView(data)
self:sendNotification(UIEvent.JumpPanel,data)
end
function BaseView:CheckViewCanOpen(id)
return FunctionUnLockFunc.Me():CheckCanOpenByPanelId(id)
end
function BaseView:listNotificationInterests()
return self.interests or {};
end
function BaseView:handleNotification(note)
if(self.ListenerEvtMap ~= nil) then
local evt = self.ListenerEvtMap[note.name]
if(evt~=nil) then
evt(self,note)
end
end
end