303 lines
11 KiB
Lua
303 lines
11 KiB
Lua
require("Base/BasePanel")
|
||
local MonsterShowPanel = Inherit(BasePanel)
|
||
local this = MonsterShowPanel
|
||
local monsterGroup = ConfigManager.GetConfig(ConfigName.MonsterGroup)
|
||
local monsterConfig = ConfigManager.GetConfig(ConfigName.MonsterConfig)
|
||
local monsterViewConfig = ConfigManager.GetConfig(ConfigName.MonsterViewConfig)
|
||
local rewardGroup = ConfigManager.GetConfig(ConfigName.RewardGroup)
|
||
|
||
-- 特效播放完毕之前关闭界面会报错
|
||
local canClose = false
|
||
local showType = {
|
||
[1] = {resPath = "y-ystx-ystx", text = Language[10530]},
|
||
[2] = {resPath = "r_shilian_shoulinglaixi", text = Language[10531]},
|
||
[3] = {resPath = "", text = Language[10531]},
|
||
[4] = {resPath = "r_guaji_waidiruqin", text = Language[10532]},
|
||
}
|
||
this.panelType = 0
|
||
|
||
-- 英雄
|
||
local _HeroPosOffset = {0, -150} -- 偏移
|
||
local _HeroScale = 0.7 -- 缩放
|
||
-- 怪物
|
||
local _MonsterPosOffset = {0, 0} -- 偏移
|
||
local _MonsterScale = 1 -- 缩放
|
||
|
||
local PANEL_TYPE = {
|
||
ELITE = 1,
|
||
BOSS = 2,
|
||
MONSTER = 3,
|
||
AdventureAlianInvasionBoss=4,
|
||
}
|
||
|
||
|
||
|
||
--初始化组件(用于子类重写)
|
||
function MonsterShowPanel:InitComponent()
|
||
this.spLoader = SpriteLoader.New()
|
||
this.btnFight = Util.GetGameObject(self.gameObject, "btnFight")
|
||
this.btnBack = Util.GetGameObject(self.gameObject, "btnBack")
|
||
this.timePanel = Util.GetGameObject(self.gameObject, "time")
|
||
this.timeTxt = Util.GetGameObject(self.gameObject, "time/time"):GetComponent("Text")
|
||
this.nameTxt = Util.GetGameObject(self.gameObject, "name"):GetComponent("Text")
|
||
this.lvlTxt = Util.GetGameObject(self.gameObject, "lv"):GetComponent("Text")
|
||
this.hpPanel = Util.GetGameObject(self.gameObject, "hp")
|
||
this.hpTxt = Util.GetGameObject(self.gameObject, "hp/hp"):GetComponent("Text")
|
||
this.liveRoot = Util.GetGameObject(self.gameObject, "liveroot")
|
||
this.rewardPanel = Util.GetGameObject(self.gameObject, "reward")
|
||
this.rewardList = Util.GetGameObject(self.gameObject, "reward/rewardlist")
|
||
this.Third = Util.GetGameObject(self.gameObject, "Third")
|
||
this.rewardtip=Util.GetGameObject(self.gameObject, "reward/rewardtip"):GetComponent("Text")
|
||
-- 提示的图片类型
|
||
this.tipImg = Util.GetGameObject(self.gameObject, "Third/image/ziti"):GetComponent("Image")
|
||
-- 按钮文字
|
||
this.btnText = Util.GetGameObject(self.gameObject, "btnFight/Text"):GetComponent("Text")
|
||
this.hpPanel:SetActive(false)
|
||
this.timePanel:SetActive(false)
|
||
|
||
-- 兽潮相关
|
||
this.waveNum = Util.GetGameObject(self.gameObject, "wave"):GetComponent("Text")
|
||
this.monsterRoot = Util.GetGameObject(self.gameObject, "monsterRoot")
|
||
-- 4个妖怪头像
|
||
this.monsterList = {}
|
||
for i = 1, 5 do
|
||
this.monsterList[i] = Util.GetGameObject(this.monsterRoot, "monterRoot/frame_" .. i)
|
||
end
|
||
|
||
end
|
||
|
||
--绑定事件(用于子类重写)
|
||
function MonsterShowPanel:BindEvent()
|
||
-- 返回按钮
|
||
Util.AddClick(this.btnBack, function()
|
||
if this.panelType == PANEL_TYPE.AdventureAlianInvasionBoss then
|
||
this:ClosePanel()
|
||
else
|
||
if canClose then
|
||
-- 关闭当前界面
|
||
if this.closeCallBack then this.closeCallBack() end
|
||
end
|
||
end
|
||
|
||
if this.panelType == PANEL_TYPE.MONSTER then
|
||
if this.closeCallBack then this.closeCallBack() end
|
||
self:ClosePanel()
|
||
end
|
||
end)
|
||
|
||
-- 战斗
|
||
Util.AddClick(this.btnFight, function()
|
||
if this.panelType ~= PANEL_TYPE.MONSTER then
|
||
-- 试炼副本等待战斗面板打开后才关闭界面
|
||
if this.panelType == PANEL_TYPE.BOSS then
|
||
CallBackOnPanelOpen(UIName.BattlePanel, function ()
|
||
this:ClosePanel()
|
||
end)
|
||
else
|
||
this:ClosePanel()
|
||
end
|
||
end
|
||
|
||
|
||
if this.func then
|
||
this.func()
|
||
end
|
||
end)
|
||
end
|
||
|
||
--添加事件监听(用于子类重写)
|
||
function MonsterShowPanel:AddListener()
|
||
end
|
||
|
||
--移除事件监听(用于子类重写)
|
||
function MonsterShowPanel:RemoveListener()
|
||
end
|
||
|
||
-- 根据不同的参数类型来显示不同的界面效果
|
||
-- 默认不传或者是1,显示为精英怪的数据
|
||
-- 参数类型2为试炼副本内的普通Boss怪
|
||
-- 参数类型3为兽潮怪物
|
||
-- 执行两个回调。第一个是挑战的回调, 第二个是点击关闭的回调
|
||
--界面打开时调用(用于子类重写)
|
||
function MonsterShowPanel:OnOpen(monsterGroupId, func, closeCallBack, isShowWarning, panelType)
|
||
this.monsterGroupId = monsterGroupId
|
||
this.func = func
|
||
this.closeCallBack = closeCallBack
|
||
this.panelType = panelType
|
||
-- 播放强敌来袭特效
|
||
if isShowWarning then
|
||
this.Third:SetActive(true)
|
||
Timer.New(function ()
|
||
this.Third:SetActive(false)
|
||
canClose = true
|
||
end, 1.5):Start()
|
||
end
|
||
-- 初始化组件显示
|
||
this.InitCompShow(panelType)
|
||
-- 初始化界面显示
|
||
this.InitPanelShow(panelType or 1)
|
||
end
|
||
|
||
|
||
--界面打开或者重新打开后,界面刷新时调用(用于子类重写)
|
||
function MonsterShowPanel:OnShow()
|
||
-- 基础信息
|
||
local monsterGroupId = this.monsterGroupId
|
||
if not monsterGroupId then return end
|
||
|
||
-- 获取数据
|
||
local monsterData = monsterGroup[monsterGroupId]
|
||
|
||
if not monsterData then
|
||
Log("MonsterGroup 表中找不到怪物组ID" .. monsterGroupId) return
|
||
end
|
||
|
||
local monsterId = monsterData.Contents[1][1]
|
||
local monsterInfo = monsterConfig[monsterId]
|
||
|
||
-- 加载立绘
|
||
this.LoadLive(monsterInfo.MonsterId)
|
||
|
||
-- 基础内容
|
||
this.lvlTxt.text = "Lv."..monsterInfo.Level
|
||
this.nameTxt.text = GetLanguageStrById(monsterInfo.ReadingName)
|
||
|
||
-- 奖励展示
|
||
-- 兽潮直接读表
|
||
if this.panelType ~= PANEL_TYPE.MONSTER then
|
||
local rewardId = monsterData.Rewardgroup[1]
|
||
this.GridAdapter(this.rewardList, rewardId)
|
||
end
|
||
|
||
-- 加载货币
|
||
if this.panelType == PANEL_TYPE.MONSTER then
|
||
if not this.UpView then
|
||
this.UpView = SubUIManager.Open(SubUIConfig.UpView, MonsterShowPanel.gameObject.transform)
|
||
this.UpView:OnOpen({ showType = UpViewOpenType.ShowLeft, panelType = PanelType.MonsterCamp })
|
||
end
|
||
end
|
||
|
||
end
|
||
|
||
function this.InitCompShow(panelType)
|
||
--精英怪特有
|
||
this.timePanel:SetActive(panelType == PANEL_TYPE.ELITE)
|
||
this.hpPanel:SetActive(panelType == PANEL_TYPE.ELITE)
|
||
|
||
-- 兽潮特有
|
||
this.waveNum.gameObject:SetActive(false)
|
||
this.monsterRoot:SetActive(panelType == PANEL_TYPE.MONSTER)
|
||
this.rewardtip.text=Language[10533]
|
||
end
|
||
|
||
|
||
function this.InitPanelShow(panelType)
|
||
if panelType ~= PANEL_TYPE.MONSTER then
|
||
this.tipImg.sprite = this.spLoader:LoadSprite(showType[panelType].resPath)
|
||
this.tipImg:SetNativeSize()
|
||
this.btnText.text = showType[panelType].text
|
||
elseif panelType == PANEL_TYPE.MONSTER then
|
||
this.btnText.text = showType[panelType].text
|
||
this.waveNum.text = Language[10262] .. MonsterCampManager.monsterWave .. Language[10266]
|
||
-- 显示4只小怪头像
|
||
this.ShowMonsterIcon()
|
||
end
|
||
|
||
end
|
||
|
||
-- 设置显示小怪
|
||
function this.ShowMonsterIcon()
|
||
local monsterInfo, mainInfo = MonsterCampManager.GetCurMonsterInfo()
|
||
-- 初始化隐藏
|
||
for i = 1, 5 do
|
||
this.monsterList[i]:SetActive(false)
|
||
end
|
||
|
||
Log("怪物图标数量是 === ".. #monsterInfo.icon)
|
||
for i = 1, #monsterInfo.icon do
|
||
Util.GetGameObject(this.monsterList[i], "icon"):GetComponent("Image").sprite = this.spLoader:LoadSprite(monsterInfo.icon[i])
|
||
this.monsterList[i]:SetActive(true)
|
||
end
|
||
|
||
-- 设置奖励
|
||
this.SetRewardShow(this.rewardList, monsterInfo.rewardShow)
|
||
end
|
||
|
||
function this.SetRewardShow(grid, rewardData)
|
||
Util.ClearChild(grid.transform)
|
||
for i = 1, #rewardData do
|
||
local item = {}
|
||
local itemId = rewardData[i][1]
|
||
item[#item + 1] = itemId
|
||
item[#item + 1] = rewardData[i][2]
|
||
local view = SubUIManager.Open(SubUIConfig.ItemView, grid.transform)
|
||
view:OnOpen(false, item, 1.1, false)
|
||
end
|
||
end
|
||
|
||
local liveName, liveNode
|
||
-- 加载立绘
|
||
function this.LoadLive(monsterViewId)
|
||
local liveScale =nil
|
||
local livePos = nil
|
||
if monsterViewId > 10000 then
|
||
local monsterViewInfo = ConfigManager.GetConfigData(ConfigName.HeroConfig, monsterViewId)
|
||
if not monsterViewInfo then return end
|
||
liveName = GetResourcePath(monsterViewInfo.Live)
|
||
liveScale = monsterViewInfo.Scale * _HeroScale
|
||
livePos = Vector3.New(monsterViewInfo.Position[1] + _HeroPosOffset[1], monsterViewInfo.Position[2] + _HeroPosOffset[2], 0)
|
||
else
|
||
local monsterViewInfo = ConfigManager.GetConfigData(ConfigName.MonsterViewConfig, monsterViewId)
|
||
if not monsterViewInfo then return end
|
||
liveName = GetResourcePath(monsterViewInfo.Live)
|
||
liveScale = monsterViewInfo.enemy_liveScale * _MonsterScale
|
||
livePos = Vector3.New(monsterViewInfo.offset[1] + _MonsterPosOffset[1], monsterViewInfo.offset[2] + _MonsterPosOffset[2], 0)
|
||
end
|
||
|
||
liveNode = poolManager:LoadLive(liveName, this.liveRoot.transform,
|
||
Vector3.one * liveScale, livePos)
|
||
|
||
local SkeletonGraphic = liveNode:GetComponent("SkeletonGraphic")
|
||
local idle = function() SkeletonGraphic.AnimationState:SetAnimation(0, "idle", true) end
|
||
SkeletonGraphic.AnimationState:SetAnimation(0, "idle", true)
|
||
SkeletonGraphic.AnimationState.Complete = SkeletonGraphic.AnimationState.Complete + idle
|
||
poolManager:SetLiveClearCall(liveName, liveNode, function ()
|
||
SkeletonGraphic.AnimationState.Complete = SkeletonGraphic.AnimationState.Complete - idle
|
||
end)
|
||
end
|
||
|
||
-- 数据匹配
|
||
function this.GridAdapter(grid, rewardGroupId)
|
||
if not rewardGroupId then Log(Language[10534] .. rewardGroupId) end
|
||
Util.ClearChild(grid.transform)
|
||
local itemDataList = rewardGroup[rewardGroupId].ShowItem
|
||
if not rewardGroup[rewardGroupId].ShowItem then
|
||
Log("RewardGroup 的ShowItem 没有数据, 对应的ID是 " .. rewardGroupId)
|
||
end
|
||
for i = 1, #itemDataList do
|
||
local view = SubUIManager.Open(SubUIConfig.ItemView,grid.transform)
|
||
local item = {itemDataList[i][1], 0}
|
||
view:OnOpen(false, item, 1.1, false)
|
||
end
|
||
end
|
||
|
||
--界面关闭时调用(用于子类重写)
|
||
function MonsterShowPanel:OnClose()
|
||
if liveNode then
|
||
poolManager:UnLoadLive(liveName, liveNode)
|
||
liveNode = nil
|
||
end
|
||
canClose = false
|
||
end
|
||
|
||
--界面销毁时调用(用于子类重写)
|
||
function MonsterShowPanel:OnDestroy()
|
||
this.spLoader:Destroy()
|
||
this.monsterList = {}
|
||
if this.panelType == PANEL_TYPE.MONSTER then
|
||
SubUIManager.Close(this.UpView)
|
||
this.UpView = nil
|
||
end
|
||
end
|
||
|
||
return MonsterShowPanel |