|
|
- -- <*
- -- @Author: Saber
- -- @Description: 圣物系统内通用装备item
- -- *>
- PsionicArmorItem = PsionicArmorItem or BaseClass(BaseItem)
- local PsionicArmorItem = PsionicArmorItem
-
- function PsionicArmorItem:__init(parent_wnd,prefab_asset,layer_name)
- self.base_file = "psionic"
- self.layout_file = "PsionicArmorItem"
- self.parent_wnd = parent_wnd
- self.layer_name = layer_name
- self.is_selected = false
- self.item_scale = 1
- self.item_gray = false
- self.item_total_gray = false
- self.break_show_locktype = 0 -- 圣物突破右侧展示节点无数据表现类型
- self.model = PsionicModel:getInstance()
- self.goods_model = GoodsModel:getInstance()
- self.pos = false
- self.slot_break_red_equip_list = {}
- self:Load()
- end
-
- function PsionicArmorItem:Load_callback()
- local nodes = {
- "empty_bg:obj",
- "item_con",
- "reddot:obj",
- "equiped:obj", -- 穿戴中标识
- "selected:obj", -- 选中标识
- "selected2:obj",
- "locked:obj",
- "break_add:obj",
- "quality_flag:obj:img", -- 最高品质标识
- -- 可穿戴/可替换标识
- "equip_flag:obj",
- "replace_flag:obj",
- }
- self:GetChildren(nodes)
-
- self.award_item = UIObjPool:getInstance():PopItem(UIObjPool.UIType.AwardItem, self.item_con)
- self.award_item:SetItemSize(78, 78)
- self.award_item:SetVisible(false)
-
- local function short_click_callback(target, x, y)
- self:ClickHandler(target,x,y)
- end
- self.award_item.ClickCallFun = short_click_callback --覆盖AwardItem 的点击方法
-
- self:AddEvents()
- if self.need_refreshData then
- self:UpdateView()
- self:SetSelected(self.is_selected)
- end
- end
-
- function PsionicArmorItem:AddEvents( )
- local function update_equip_state(tab_type)
- if not tab_type then
- self:UpdateEquipState()
- elseif tab_type == PsionicConst.TabId.PArmor then
- self:UpdateEquipState()
- elseif tab_type == PsionicConst.TabId.PBreak then
- self:UpdateItemReddot()
- end
- end
- self:BindEvent(self.model, PsionicConst.UPDATE_RED_BY_TABID, update_equip_state)
- end
-
- -- data:道具数据 flag:道具的展示类型 default_typeId:没data的情况下用于展示的默认id
- function PsionicArmorItem:SetData(data, flag, callback, default_typeId, pos)
- self.data = data
- self.flag = flag or PsionicConst.ArmorItemFlag.Bag
- self.callback = callback
- self.default_typeId = default_typeId
- self.pos = pos
- if self.is_loaded then
- self.need_refreshData = false
- self:UpdateView()
- else
- self.need_refreshData = true
- end
- end
-
- -- 获取圣物突破红点显示的goodsid列表
- function PsionicArmorItem:SetBreakSlotRedEquipList(slot_break_red_equip_list)
- self.slot_break_red_equip_list = slot_break_red_equip_list
- if self.is_loaded then
- self:UpdateItemReddot()
- end
- end
-
- function PsionicArmorItem:UpdateView( )
- self:SetItemScale(self.item_scale)
- if not self.data or self.data.is_empty then
- self.empty_bg_obj:SetActive(true)
- self.equiped_obj:SetActive(false)
- if self.default_typeId then -- 显示默认id配置装备
- self.award_item:SetData(self.default_typeId, 1, nil)
- self.award_item:SetVisible(true)
- else
- self.award_item:SetVisible(false)
- end
- else
- self.empty_bg_obj:SetActive(false)
- self.award_item:SetData(self.data.type_id, 1, nil)
- self.award_item:SetVisible(true)
- end
- -- 穿戴flag相关
- self:UpdateEquipState()
- -- 灰化和整体灰化部分
- self:SetItemGray(self.item_gray)
- self:SetItemTotalGray(self.item_total_gray)
- -- 更新突破操作界面锁定展示
- self:UpdateBreakShowLockType(self.break_show_locktype)
- self:AddToStageHandler()
- -- 更新红点
- self:UpdateItemReddot()
- end
-
- -- 节点加上一层灰色蒙版
- function PsionicArmorItem:SetItemGray(bool)
- self.item_gray = bool
- if self.award_item then
- self.award_item:SetGray(bool)
- end
- end
-
- -- 节点完全置灰
- function PsionicArmorItem:SetItemTotalGray(bool)
- self.item_total_gray = bool
- if self.award_item then
- self.award_item:SetIconGray(bool)
- end
- end
-
- -- 调整【本节点】的缩放比例
- function PsionicArmorItem:SetItemScale(scale)
- self.item_scale = scale or 1
- if self.is_loaded then
- SetLocalScale(self.transform, self.item_scale, self.item_scale, self.item_scale)
- end
- end
-
- -- 判断这件装备是否是已穿戴/替换后能提升战斗力,根据情况显示标识
- function PsionicArmorItem:UpdateEquipState()
- local is_cur_equiped = false -- 是否是当前上阵的装备
- local show_equip_flag = false -- 是否显示可装备标志
- local show_replace_flag = false -- 是否显示可替换标志
- if (self.flag == PsionicConst.ArmorItemFlag.Bag or self.flag == PsionicConst.ArmorItemFlag.Resolve or self.flag == PsionicConst.ArmorItemFlag.Break) and self.award_item
- and self.data and not self.data.is_empty then
- local cur_equip_vo = self.goods_model:GetPsionicEquipBySlot(self.data.subtype)
- if cur_equip_vo then -- 根据情况区分展示可替换还是可装备
- if cur_equip_vo.goods_id == self.data.goods_id then
- is_cur_equiped = true
- else
- local equip_state = self.model:IsPsionicEquipPowerUpOrNot(self.data.goods_id) and 1 or nil
- show_replace_flag = equip_state == 1
- end
- else -- 当前栏位没有装备,则获取栏位红点
- show_equip_flag = self.model:GetPsionicEquipSlotRed(self.data.subtype)
- end
- end
- if self.equiped_obj.activeSelf ~= is_cur_equiped then
- self.equiped_obj:SetActive(is_cur_equiped)
- end
- if self.equip_flag_obj.activeSelf ~= show_equip_flag then
- self.equip_flag_obj:SetActive(show_equip_flag)
- end
- if self.replace_flag_obj.activeSelf ~= show_replace_flag then
- self.replace_flag_obj:SetActive(show_replace_flag)
- end
- end
-
- function PsionicArmorItem:ClickHandler(target, x, y)
- -- 默认展示id的强制固定展示类型
- if self.pos == 1 then
- local helpVo = GuideModel:getInstance():GetHelpVo(HelpType.TYPE_PSIONIC,3)
- if helpVo then
- GlobalEventSystem:Fire(EventName.FINISH_CURRENT_HELP_STEP,helpVo)
- end
- end
-
- if self.default_typeId then
- UIToolTipMgr:getInstance():AppendPsionicTips(nil, x, y, PsionicConst.ArmorItemFlag.Show, self.default_typeId)
- return
- end
- if not self.data then return end
- local function selected_callback(flag)
- self:SetSelected(flag)
- end
- if self.flag == PsionicConst.ArmorItemFlag.Resolve then -- 装备分解展示
- if self.callback then
- self.callback(self.data, selected_callback)
- end
- elseif self.flag == PsionicConst.ArmorItemFlag.Break then -- 装备突破展示
- if self.data and self.callback then
- -- 修改为切换查看的装备数据
- self.callback(self.data)
- end
- else
- UIToolTipMgr:getInstance():AppendPsionicTips(self.data, x, y, self.flag)
- end
- end
-
- -- 设置item的选中状态
- function PsionicArmorItem:SetSelected(flag)
- self.is_selected = flag and true or false
- if self.is_loaded then
- if self.flag == PsionicConst.ArmorItemFlag.Resolve -- 装备分解展示
- or self.flag == PsionicConst.ArmorItemFlag.Break then -- 装备突破展示
- if self.selected_obj.activeSelf ~= (self.is_selected and self.flag == PsionicConst.ArmorItemFlag.Break) then
- self.selected_obj:SetActive(self.is_selected and self.flag == PsionicConst.ArmorItemFlag.Break)
- end
- if self.selected2_obj.activeSelf ~= (self.is_selected and self.flag == PsionicConst.ArmorItemFlag.Resolve) then
- self.selected2_obj:SetActive(self.is_selected and self.flag == PsionicConst.ArmorItemFlag.Resolve)
- end
- self.award_item:SetGray(self.is_selected and self.flag == PsionicConst.ArmorItemFlag.Resolve)
- end
- end
- end
-
- -- 更新圣物突破时展示节点的数据缺失表现 lock_type:1 无数据但不锁定 2 无数据锁定
- function PsionicArmorItem:UpdateBreakShowLockType(lock_type)
- self.break_show_locktype = lock_type
- if self.is_loaded then
- if not self.data and self.flag == PsionicConst.ArmorItemFlag.BreakSelected then
- self.break_add_obj:SetActive(lock_type == 1)
- self.locked_obj:SetActive(lock_type == 2)
- elseif self.data and self.flag == PsionicConst.ArmorItemFlag.BreakSelected then
- self.break_add_obj:SetActive(false)
- self.locked_obj:SetActive(false)
- end
- end
- end
-
- function PsionicArmorItem:UpdateItemReddot( )
- if not self.data or self.data.is_empty then
- self.reddot_obj:SetActive(false)
- return
- end
- if self.flag == PsionicConst.ArmorItemFlag.Break then -- 突破红点
- -- 先获取突破红点,再判断是否是身上穿的装备
- -- local break_bool = self.model:GetPsionicBreakSlotRed(self.data.subtype)
- -- if break_bool then
- -- local cur_equip_vo = self.goods_model:GetPsionicEquipBySlot(self.data.subtype)
- -- self.reddot_obj:SetActive(cur_equip_vo.goods_id == self.data.goods_id)
- -- else
- -- self.reddot_obj:SetActive(false)
- -- end
- local break_red = self.slot_break_red_equip_list[self.data.subtype] and self.slot_break_red_equip_list[self.data.subtype] == self.data.goods_id or false
- self.reddot_obj:SetActive(break_red)
-
- else
- self.reddot_obj:SetActive(false)
- end
- end
-
- function PsionicArmorItem:__delete( )
- if self.award_item then
- UIObjPool:getInstance():PushItem(UIObjPool.UIType.AwardItem, self.award_item)
- end
- self.award_item = nil
- end
-
- function PsionicArmorItem:AddToStageHandler()
- if self.pos ~= 1 then return end
- local helpVo = GuideModel:getInstance():GetHelpVo(HelpType.TYPE_PSIONIC,3)
- if not helpVo then return end
- local help_type = helpVo.help_type
- local step = helpVo.step
- local button = false
- if (help_type == HelpType.TYPE_PSIONIC) and step == 3 then
- button = self.item_con
- end
- if button then
- local function call_back()
-
- end
- GlobalEventSystem:Fire(EventName.OPEN_GUIDE_PROMPT_VIEW, button.transform, self.transform, call_back, helpVo, self.layout_file)
- end
- end
|