|
|
- --[[
- @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
|