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

386 lines
11 KiB
Plaintext

autoImport("FloatMessage")
autoImport("CountDownMsg")
autoImport("FloatMessageEight")
autoImport("QueuePusherCtrl")
autoImport("QueueWaitCtrl")
autoImport("MidMsg")
autoImport("MidAlphaMsg")
autoImport("ShowyMsg")
autoImport("MaintenanceMsg")
autoImport("TypeNineFloatPanel")
autoImport("UIViewAchievementPopupTip")
FloatingPanel = class("FloatingPanel", ContainerView)
FloatingPanel.Instance = nil
FloatingPanel.ViewType = UIViewType.FloatLayer
function FloatingPanel:Init()
self.pushCtrl = QueuePusherCtrl.new(self.gameObject,FloatMessage)
self.pushCtrl.maxNum = 3
self.pushCtrl.gap = -30
self.pushCtrl.speed = 95
self.pushCtrl.hideDelay = 0.5
self.pushCtrl.hideDelayGrow = 0.4
self.pushCtrl:SetStartPos(0,-60)
self.pushCtrl:SetEndPos(0,-10)
self.pushCtrl:SetDir(QueuePusherCtrl.Dir.Vertical)
if(FloatingPanel.Instance == nil) then
FloatingPanel.Instance = self
end
self.waitCtrl = QueueWaitCtrl.CreateAsArray(100)
self.beforePanel = self:FindGO("BeforePanel");
self.goUIViewAchievementPopupTip = self:FindGO('UIViewAchievementPopupTip', self.gameObject)
self:AddSubViews()
self:AddEvtListener()
end
function FloatingPanel:AddSubViews()
self.typeNineSubView = self:AddSubView("typeNineView",TypeNineFloatPanel)
self.uiViewAchievementPopupTip = self:AddSubView('UIViewAchievementPopupTip', UIViewAchievementPopupTip)
self.uiViewAchievementPopupTip:SetGameObject(self.goUIViewAchievementPopupTip)
self.uiViewAchievementPopupTip:GetGameObjects()
self.uiViewAchievementPopupTip:GetModelSet()
self.uiViewAchievementPopupTip:LoadView()
end
function FloatingPanel:AddEvtListener()
-- self:AddListenEvt(ServiceEvent.PlayerMapChange,self.SceneLoadHandler)
EventManager.Me():AddEventListener(ServiceEvent.PlayerMapChange, self.SceneLoadHandler, self)
helplog("FloatingPanel AddEvtListener");
end
function FloatingPanel:HandlePlayUIEffect(note)
local effect_path = note.body.path;
helplog("FloatingPanel PlayUIEffect:", effect_path);
self:PlayUIEffect(effect_path, self.gameObject, true);
-- PlotStoryViewEvent.PlayUIEffect
end
function FloatingPanel:SceneLoadHandler( note )
-- if(note.type == LoadSceneEvent.StartLoad) then
if(self.countDownMsg~=nil and self.countDownMsg.DestroyWhenLoadScene) then
self:RemoveCountDown(self.countDownMsg.data.id)
end
self:RemoveMidMsg();
ComboCtl.Instance:Clear()
-- end
end
function FloatingPanel:SetStartPos( pos )
-- body
self.pushCtrl:SetStartPos(pos.start.x,pos.start.y)
self.pushCtrl:SetEndPos(pos.endPos.x,pos.endPos.y)
end
function FloatingPanel:ResetDefaultPos( )
-- body
self.pushCtrl:SetStartPos(0,-60)
self.pushCtrl:SetEndPos(0,-10)
end
function FloatingPanel:FloatMiddleBottom(sortID,text)
self.typeNineSubView:AddSysMsg(sortID,text)
end
function FloatingPanel:ClearFloatMiddleBottom()
self.typeNineSubView:Clear()
end
function FloatingPanel:TryFloatMessageByText(text)
local cell = self:GetFloatCell()
cell:SetMsg(text)
self.pushCtrl:AddCell(cell)
-- self:AddToWaiting(self:GetFloatCell(text))
end
function FloatingPanel:FloatTypeEightMsgByData(data,startPos,offset)
local cell = FloatMessageEight.new(self.gameObject,data,startPos,offset)
self.waitCtrl:AddCell(cell,0.5)
end
function FloatingPanel:StopFloatTypeEightMsg()
self.waitCtrl:Clear()
end
function FloatingPanel:TryFloatMessageByTextWithTransparentBg( text )
-- body
local cell = self:GetFloatCellWithTransparentBg()
cell:SetMsgCenterAlign(text)
self.pushCtrl:AddCell(cell)
end
function FloatingPanel:GetFloatCellWithTransparentBg( )
-- body
local floatMsg = FloatMessage.new(self.gameObject)
floatMsg:Hide(floatMsg.bg.gameObject)
return floatMsg
end
function FloatingPanel:TryFloatMessageByData(data)
-- local cell = self:GetFloatCell()
-- cell:SetData(data)
self.pushCtrl:AddData(data)
-- self:AddToWaiting(self:GetFloatCell(text))
end
function FloatingPanel:GetFloatCell()
return FloatMessage.new(self.gameObject)
end
function FloatingPanel:ShowMapName(name1, name2)
if(self:ObjIsNil(self.mapPfb))then
self.mapPfb = self:LoadPreferb("tip/MapNameTip", self.gameObject);
local maplab1 = self:FindChild("MapLabel1" ,self.mapPfb):GetComponent(UILabel);
maplab1.text = name1;
local maplab2 = self:FindChild("MapLabel2" ,self.mapPfb):GetComponent(UILabel);
maplab2.text = name2;
LeanTween.delayedCall(self.mapPfb, 1, function ()
if(not self:ObjIsNil(self.mapPfb))then
GameObject.Destroy(self.mapPfb);
end
self.mapPfb = nil;
end):setDestroyOnComplete(true);
end
end
function FloatingPanel:FloatingMidEffect(effectid)
local effectName = effectid and EffectMap.UIEffect_IdMap[effectid];
if(effectName)then
self:PlayUIEffect(effectName,
self.beforePanel,
true,
FloatingPanel._HandleMidEffectShow,
self);
end
end
function FloatingPanel:HandleMidEffectShow(effectHandle)
local effectGO = effectHandle.gameObject;
local panels = UIUtil.GetAllComponentsInChildren(effectGO, UIPanel, true);
if(#panels == 0)then
return;
end
local upPanel = GameObjectUtil.Instance:FindCompInParents(effectGO, UIPanel);
local minDepth = nil;
for i=1,#panels do
if(minDepth == nil)then
minDepth = panels[i].depth;
else
minDepth = math.min(panels[i].depth, minDepth);
end
end
local startDepth = 1;
for i=1,#panels do
panels[i].depth = panels[i].depth + startDepth + upPanel.depth - minDepth;
end
end
function FloatingPanel._HandleMidEffectShow(effectHandle, owner)
if(effectHandle and owner)then
owner:HandleMidEffectShow(effectHandle);
end
end
function FloatingPanel:PlayMidEffect(effectPath)
self:PlayUIEffect(effectPath,self.beforePanel,true, self._HandleMidEffectCreate_Mediator, self);
end
function FloatingPanel._HandleMidEffectCreate_Mediator(effectHandle, owner)
owner:_HandleMidEffectCreate(effectHandle);
end
function FloatingPanel:_HandleMidEffectCreate(effectHandle)
helplog("_HandleMidEffectCreate");
local go = effectHandle.gameObject;
local widgets = UIUtil.GetAllComponentsInChildren(go, UIWidget);
for i=1,#widgets do
widgets[i].gameObject:SetActive(false);
widgets[i].gameObject:SetActive(true);
helplog("_HandleMidEffectCreate:", widgets[i]);
end
end
function FloatingPanel:ShowPowerUp(upvalue, effectid, tip)
local effectid = effectid or EffectMap.UI.Score_Up;
local tip = tip or ZhString.Float_PlayerScoreUp;
local rid = ResourcePathHelper.EffectUI(effectid);
local anchorDown = self:FindGO("Anchor_Down");
local scoreup = self:ReInitEffect(rid, anchorDown, Vector3(0, 180), function (go)
LeanTween.cancel(go);
end);
local frome = 0;
local to = upvalue or 200;
local time = math.max(0.7, (to-frome)*(1/200));
time = math.min(time, 1.5);
local label = self:FindGO("Label", scoreup):GetComponent(UILabel);
local anim = scoreup:GetComponent(Animator);
-- anim:Play ("Score_up1", -1, 0);
LeanTween.value(scoreup, function (f)
label.text = tip..math.floor(f);
end, frome, to, time):setOnComplete(function ()
LeanTween.delayedCall(scoreup, 0.3, function (f)
anim:Play("Score_up2", -1, 0);
local autodestroy = scoreup:AddComponent(EffectAutoDestroy);
autodestroy.OnFinish = function ()
scoreup = nil;
end
end);
end):setDestroyOnComplete(true);
end
function FloatingPanel:ShowManualUp()
self:PlayUIEffect(EffectMap.UI.UIAdventureLv_up,
nil,
true,
FloatingPanel.UIAdventureLv_upEffectHandle,
self);
end
local tempVector3 = LuaVector3.zero
function FloatingPanel.UIAdventureLv_upEffectHandle( effectHandle, owner )
if(owner)then
local effectGO = effectHandle.gameObject;
tempVector3:Set(0,100,0)
effectGO.transform.localPosition = tempVector3
local shuzi = owner:FindGO("shuzi",effectGO)
GameObjectUtil.Instance:DestroyAllChildren(shuzi)
local grid = shuzi:GetComponent(UIGrid)
if(not grid)then
grid = shuzi:AddComponent(UIGrid)
end
if(grid)then
grid.cellWidth = 19
grid.pivot = UIWidget.Pivot.Center;
local manualLevel = AdventureDataProxy.Instance:getManualLevel()
manualLevel = StringUtil.StringToCharArray(tostring(manualLevel))
for i=1,#manualLevel do
local obj = GameObject("tx")
obj.transform:SetParent(grid.transform,false)
tempVector3:Set(0,0,0)
obj.transform.localPosition = tempVector3
local sprite = obj:AddComponent(UISprite)
local atlas = RO.AtlasMap.GetAtlas("NewCom")
sprite.atlas = atlas
sprite.depth = 200
sprite.spriteName = string.format("txt_%d",manualLevel[i])
sprite:MakePixelPerfect()
end
grid:Reposition()
end
end
end
function FloatingPanel:ReInitEffect(rid, container, pos, destoryCallback)
self.catch = self.catch or {};
local result = self.catch[rid];
if(not self:ObjIsNil(result))then
if(type(destoryCallback) == "function")then
destoryCallback(result);
end
GameObject.DestroyImmediate(result);
end
result = GameObjPool.Instance:RGet(rid,"UI", container);
tempVector3:Set(0,0,0)
result.transform.localPosition = pos or tempVector3
self.catch[rid] = result;
return result;
end
function FloatingPanel:AddCountDown(text,data)
if(self.countDownMsg == nil or (self.countDownMsg and self.countDownMsg.hasBeenDestroyed)) then
self.countDownMsg = CountDownMsg.new(self.gameObject)
end
self.countDownMsg:SetData(text,data)
end
function FloatingPanel:RemoveCountDown(id)
if(self.countDownMsg and not self.countDownMsg.hasBeenDestroyed and self.countDownMsg.data.id == id) then
self.countDownMsg:DestroySelf()
end
self.countDownMsg = nil
end
function FloatingPanel:SetCountDownRemoveOnChangeScene(id,value)
if(self.countDownMsg and not self.countDownMsg.hasBeenDestroyed and self.countDownMsg.data.id == id) then
self.countDownMsg.DestroyWhenLoadScene = value
end
end
function FloatingPanel:GetMidMsg()
self:RemoveMidMsg();
self.midMsg = MidMsg.new(self.gameObject);
return self.midMsg;
end
function FloatingPanel:RemoveMidMsg()
if(self.midMsg)then
self.midMsg:Exit();
self.midMsg = nil;
end
end
function FloatingPanel:ShowMidAlphaMsg(text)
if(not self.midAlphaMsg)then
self.midAlphaMsg = MidAlphaMsg.new(self.gameObject);
end
self.midAlphaMsg:SetData(text);
self.midAlphaMsg:SetExitCall(self.MidAlphaMsgEnd, self);
end
function FloatingPanel:MidAlphaMsgEnd()
self.midAlphaMsg = nil;
end
function FloatingPanel:FloatShowyMsg(text)
if(self.showyMsg)then
self.showyMsg:Exit();
end
self.showyMsg = ShowyMsg.new(self.gameObject);
self.showyMsg:SetExitCall(function ()
self.showyMsg = nil;
end);
local data = {text = text};
self.showyMsg:SetData(data);
self.showyMsg:Enter();
end
local tempArgs = {};
function FloatingPanel:CloseMaintenanceMsg()
if(self.maintenanceMsg)then
self.maintenanceMsg:Exit();
end
end
function FloatingPanel:ShowMaintenanceMsg(title, text, remark, buttonlab, picPath, confirmCall)
self:CloseMaintenanceMsg()
self.maintenanceMsg = MaintenanceMsg.new(self.gameObject);
self.maintenanceMsg:SetExitCall(function ()
self.maintenanceMsg = nil;
end);
TableUtility.TableClear(tempArgs);
tempArgs[1] = title;
tempArgs[2] = text;
tempArgs[3] = remark;
tempArgs[4] = buttonlab;
tempArgs[5] = picPath;
tempArgs[6] = confirmCall;
self.maintenanceMsg:SetData(tempArgs);
return self.maintenanceMsg
end