源战役客户端
您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符
 
 
 
 
 

329 行
8.7 KiB

--[[
@description: 可选道具槽
--]]
OptionalItemSlot = OptionalItemSlot or BaseClass(AwardItem)
local OptionalItemSlot = OptionalItemSlot
OptionalItemSlot.STATE =
{
LOCK = 0,
NONE = 1,
ADDED = 2,
}
local STATE_HANDLER =
{
[OptionalItemSlot.STATE.LOCK] =
{
SetItemState = function(self)
self:OnlyShowBg(true)
self.show_tips = false
self.icon.gameObject:SetActive(true)
self:SetRedDot(false)
lua_resM:setImageSprite(self, self.iconImage, "common_asset","ui_lock")
self.getIcon:SetActive(false)
self:CancelSelect()
end,
ClickHandler = function (self, x, y)
end,
},
[OptionalItemSlot.STATE.NONE] =
{
SetItemState = function(self)
self:OnlyShowBg(true)
self.show_tips = true
if self.show_add_effect then
self:AddUIEffect("ui_tongyong_baoshikongtexiao", self.effect, self.layer_name, nil, Vector3(1, 1, 1), true,-1, nil,nil, nil, nil)
else
self.getIcon:SetActive(true)
end
self:CheckRedDot()
self:CancelSelect()
if self.default_goods_icon then
self:SetGoodsIcon(self.default_goods_icon)
self.icon.gameObject:SetActive(true)
end
end,
ClickHandler = function (self, x, y)
UIToolTipMgr:getInstance():AppendOptionalItemTips(x, y, self.goods_type, self:GetOptionalGoods(), function(goods_vo)
self:OnSelectCallback(goods_vo)
end, self.item_type, self.cur_grade)
end,
},
[OptionalItemSlot.STATE.ADDED] =
{
SetItemState = function(self)
self.icon.gameObject:SetActive(true)
self.getIcon:SetActive(false)
self:SetData(self.select_goods_vo.type_id)
self:SetRedDot(false)
if self.show_num then
local num = GoodsModel:getInstance():GetTypeGoodsNum(self.select_goods_vo.type_id)
self:SetNumText(num)
self.numTextT.gameObject:SetActive(true)
elseif self.custom_num_str then
self.numText.text = self.custom_num_str
self.numTextT.gameObject:SetActive(true)
end
-- self:SetItemBgVisible(self.show_bg)
end,
ClickHandler = function (self, x, y)
local basic = GoodsModel:getInstance():GetGoodsBasicByTypeId(self.select_goods_vo.type_id)
local vo = GoodsModel:getInstance():GetBagGoodsInfoById(self.select_goods_vo.goods_id)
if not vo and basic.type == 20 and basic.subtype == 1 then
vo = GoodsModel:getInstance().wing_equip
elseif not vo and self.goods_type == 52 then
vo = GoodsModel:getInstance():GetSoulBeadInfoById(self.select_goods_vo.goods_id)
end
if vo then
if basic and basic.type == GoodsModel.TYPE.EQUIP then
UIToolTipMgr:getInstance():AppendEquipShowTips(self.select_goods_vo, x, y, EquipShowTips.COMPOSE_OFF,function ()
self:OnTakeOffCallback()
end)
elseif basic and basic.type == 20 then
if basic.subtype == 4 then
UIToolTipMgr:getInstance():AppendOptionalItemTips(x, y, self.goods_type, self:GetOptionalGoods(), function(goods_vo)
self:OnSelectCallback(goods_vo)
end, self.item_type)
else
UIToolTipMgr:getInstance():AppendWingTips(self.select_goods_vo.type_id, x, y, WingInfoTips.OFF_AND_REPLACE,
function()
self:OnTakeOffCallback()
end,
function()
UIToolTipMgr:getInstance():AppendOptionalItemTips(x, y, self.goods_type, self:GetOptionalGoods(), function(goods_vo)
self:OnSelectCallback(goods_vo)
end, self.item_type)
end
)
end
else
UIToolTipMgr:getInstance():AppendOptionalItemTips(x, y, self.goods_type, self:GetOptionalGoods(), function(goods_vo)
self:OnSelectCallback(goods_vo)
end, self.item_type)
end
else
UIToolTipMgr:getInstance():AppendOptionalItemTips(x, y, self.goods_type, self:GetOptionalGoods(), function(goods_vo)
self:OnSelectCallback(goods_vo)
end, self.item_type, self.cur_grade)
end
end,
},
}
OptionalItemSlot.Goods_Cache = {}
function OptionalItemSlot:Load_callback()
AwardItem.Load_callback(self)
if self.need_refresh then
self.state_hander.SetItemState(self)
end
end
function OptionalItemSlot:__delete()
self:CancelSelect()
end
function OptionalItemSlot:Initialization(goods_type, type_id_list, callback_fun, item_type, show_bg, show_num, selected_goods_vo, show_add_effect, show_redDot)
self.callback_fun = callback_fun
self.goods_type = goods_type
self.item_type = item_type
self.show_num = show_num
self.cur_state = nil
self.state_hander = nil
self.show_bg = true --show_bg == nil and false or show_bg
self.show_add_effect = show_add_effect
self.show_redDot = show_redDot
self.type_id_list = type_id_list
if selected_goods_vo then
self:ResetState(OptionalItemSlot.STATE.ADDED, selected_goods_vo)
elseif not type_id_list then
self:SetState(OptionalItemSlot.STATE.LOCK)
else
self:SetState(OptionalItemSlot.STATE.NONE)
end
end
function OptionalItemSlot:SetOptionalType(type_id_list, default_select)
self:CancelSelect()
if not type_id_list then
self:SetState(OptionalItemSlot.STATE.LOCK)
else
self.type_id_list = type_id_list
self:SetState(OptionalItemSlot.STATE.NONE)
end
if default_select then
self:AutoFillGoods()
end
end
function OptionalItemSlot:SetCurGrade( grade )
self.cur_grade = grade
end
function OptionalItemSlot:ResetState(state, goods_vo)
state = state or OptionalItemSlot.STATE.NONE
self:CancelSelect()
if goods_vo and state == OptionalItemSlot.STATE.ADDED then
OptionalItemSlot.Goods_Cache[goods_vo.goods_id] = goods_vo
self.select_goods_vo = goods_vo
end
self:SetState(state, true)
end
function OptionalItemSlot:AutoFillGoods()
if self.cur_state == OptionalItemSlot.STATE.NONE then
local list = self:GetOptionalGoods()
local first = _G.next(list)
if first then
self:OnSelectCallback(list[first])
end
end
end
function OptionalItemSlot:SetDefaultIcon(goods_icon)
self.default_goods_icon = goods_icon
if self.is_loaded then
self:SetGoodsIcon(self.default_goods_icon)
self.icon.gameObject:SetActive(true)
end
end
------------------------------------------------------------
-- 内部函数
function OptionalItemSlot:SetState(state, force)
if self.cur_state == state and not force then
return
end
self.cur_state = state
self.state_hander = STATE_HANDLER[state]
if self.is_loaded then
self.state_hander.SetItemState(self)
else
self.need_refresh = true
end
end
function OptionalItemSlot:GetOptionalGoods()
local list = {}
for _, v in pairs(self.type_id_list) do
local base = GoodsModel:getInstance():GetGoodsBasicByTypeId(tonumber(v))
if base == nil then
return
end
local goods_list = {}
if self.goods_type == 52 then --魂珠背包
goods_list = GoodsModel:getInstance():GetSoulBeadTypeGoods(tonumber(v))
else
goods_list = GoodsModel:getInstance():GetTypeGoods(tonumber(v))
end
for i, v in ipairs(goods_list) do
list[v.goods_id] = v
end
end
for _, v in pairs(OptionalItemSlot.Goods_Cache) do
if list[v.goods_id] then
list[v.goods_id] = nil
end
end
local sort_list = {}
for k, v in pairs(list) do
sort_list[#sort_list + 1] = v
end
local function sort_fun(vo1, vo2)
return self:GetItemFightValue(vo1) > self:GetItemFightValue(vo2)
end
table.sort(sort_list, sort_fun )
return sort_list, #sort_list
end
function OptionalItemSlot:GetItemFightValue(goods_vo)
local type_id = tonumber(goods_vo.type_id)
local basic = GoodsModel:getInstance():GetGoodsBasicByTypeId(type_id)
if basic.type == 20 and Config.Twing[type_id] then
return Config.Twing[type_id].power
else
return goods_vo.combat_power
end
end
-- 点击事件重载
function OptionalItemSlot:ClickCallFun(target, x, y)
print("OptionalItemSlot:ClickCallFun()1")
if not self.state_hander then
return
end
print("OptionalItemSlot:ClickCallFun()2")
self.state_hander.ClickHandler(self, x, y)
end
function OptionalItemSlot:OnSelectCallback(goods_vo)
if self.callback_fun then
self.callback_fun(true, goods_vo, self.item_type)
end
self:CancelSelect()
OptionalItemSlot.Goods_Cache[goods_vo.goods_id] = goods_vo
self.select_goods_vo = goods_vo
self:SetState(OptionalItemSlot.STATE.ADDED, true)
end
function OptionalItemSlot:OnTakeOffCallback()
if self.callback_fun then
self.callback_fun(false, self.select_goods_vo, self.item_type)
end
self:SetState(OptionalItemSlot.STATE.NONE)
end
function OptionalItemSlot:CancelSelect()
if self.select_goods_vo then
OptionalItemSlot.Goods_Cache[self.select_goods_vo.goods_id] = nil
self.select_goods_vo = nil
end
end
function OptionalItemSlot:RefreshSlotNum()
if self.show_num and self.select_goods_vo then
local num = GoodsModel:getInstance():GetTypeGoodsNum(self.select_goods_vo.type_id)
if num and num > 0 then
self:SetNumText(num)
return true
else
self:SetOptionalType(self.type_id_list)
end
end
return false
end
function OptionalItemSlot:CheckRedDot()
if not self.show_redDot then
return
end
local _, count = self:GetOptionalGoods()
if count > 0 then
self:SetRedDot(true)
else
self:SetRedDot(false)
end
end