源战役客户端
Du kan inte välja fler än 25 ämnen Ämnen måste starta med en bokstav eller siffra, kan innehålla bindestreck ('-') och vara max 35 tecken långa.
 
 
 
 
 

203 rader
7.5 KiB

-- <*
-- @Author: Saber
-- @Description: 圣物左侧佩戴装备节点
-- *>
PsionicArmorEquipItem = PsionicArmorEquipItem or BaseClass(BaseItem)
local PsionicArmorEquipItem = PsionicArmorEquipItem
function PsionicArmorEquipItem:__init(parent_wnd,prefab_asset,layer_name)
self.base_file = "psionic"
self.layout_file = "PsionicArmorEquipItem"
self.parent_wnd = parent_wnd
self.layer_name = layer_name
self.model = PsionicModel:getInstance()
self.goods_model = GoodsModel:getInstance()
self.is_selected = false
self:Load()
end
function PsionicArmorEquipItem:Load_callback()
local nodes = {
"add_btn:obj",
"red_dot:obj",
"item_con",
"selected:obj",
-- "slot_flag:tmp",
"equip_effect_con"
}
self:GetChildren(nodes)
self.circle_item = PsionicArmorCircleItem.New(self.item_con, false, self.layer_name)
self.circle_item:SetAnchoredPosition(0, 0)
self.circle_item:SetItemSize(78, 78)
self.circle_item:SetVisible(false)
self.circle_item:OverrideClickEvent(function(target,x,y)
self:ClickHandler(target,x,y)
end)
self:AddEvents()
if self.need_refreshData then
self:UpdateView()
end
end
-- 需特殊处理隐藏时的特效表现
function PsionicArmorEquipItem:SetVisible(state, force_hide)
BaseItem.SetVisible(self, state, force_hide)
if not state then
self:ClearUIEffect(self.equip_effect_con)
self.showing_equip_effect = false
end
end
function PsionicArmorEquipItem:AddEvents( )
local function click_event(target)
if target == self.add_btn_obj then
self:OnAddBtnClick()
end
end
AddClickEvent(self.add_btn_obj, click_event, LuaSoundManager.SOUND_UI.NONE)
-- 对应装备位置的属性更新之后刷新数据
local function update_equip_data(slot)
if self.slot == slot then
self:UpdateView()
if self.data then -- 存在数据的情况
-- 魂力球激活特效
if not self.showing_equip_effect then
local function call_back( )
self.showing_equip_effect = false
end
self:ClearUIEffect(self.equip_effect_con)
self:AddUIEffect("ui_hunliqiudianliang", self.equip_effect_con, self.layer_name, Vector3(0,0,0), 3, true, 0.6, nil, call_back)
self.showing_equip_effect = true
end
end
end
end
self:BindEvent(self.model, PsionicConst.UPDATE_PISIONIC_EQUIP_ARMOR, update_equip_data)
local function update_armor_red(tab_id)
if not tab_id or
tab_id == PsionicConst.TabId.PArmor or
tab_id == PsionicConst.TabId.PAdvance or
tab_id == PsionicConst.TabId.PWash or
tab_id == PsionicConst.TabId.PSkill then
self:UpdateArmorRed()
end
end
self:BindEvent(self.model, PsionicConst.UPDATE_RED_BY_TABID, update_armor_red)
end
function PsionicArmorEquipItem:SetData( slot, flag, show_flag, equip_callback, skill_callback )
-- self.data = data
self.slot = slot + 3 -- 槽位即道具子id,从4开始,需要+3映射
self.flag = flag or PsionicConst.ArmorItemFlag.Equiped -- 决定这个装备要展示的Tip操作按钮的内容
self.show_flag = show_flag -- 根据当前主界面页签不同,来区分点击逻辑的不同
self.equip_callback = equip_callback -- 装备进阶回调
self.skill_callback = skill_callback -- 技能页签回调
if self.is_loaded then
self.need_refreshData = false
self:UpdateView()
else
self.need_refreshData = true
end
end
function PsionicArmorEquipItem:UpdateView( )
self.data = self.goods_model:GetPsionicEquipBySlot(self.slot)
-- self.slot_flag_tmp.text = PsionicConst.EquipSlotName[self.slot]
if not self.data then
self.circle_item:SetVisible(false)
self.add_btn_obj:SetActive(true)
self.circle_item:SetSlotName(false)
else
self.add_btn_obj:SetActive(false)
-- print("Saber:PsionicArmorEquipItem [62] self.data.goods_id: ",self.data.goods_id)
self.circle_item:SetData(self.data.type_id, 1, nil, self.data.equip_lv)
self.circle_item:SetVisible(true)
self.circle_item:SetSlotName(self.show_flag ~= PsionicConst.TabId.PArmor and self.data.subtype or false)
end
self:UpdateArmorRed()
self:SetSelected(self.is_selected)
end
-- 修改节点的展示标志
function PsionicArmorEquipItem:ChangeShowFlag(show_flag)
self.show_flag = show_flag
self:SetSelected(self.is_selected)
self:UpdateArmorRed()
end
function PsionicArmorEquipItem:ClickHandler(target, x, y)
if not self.data then return end
-- 不同情况的点击回调,不做骚套路,严格区分
if self.show_flag == PsionicConst.TabId.PArmor then
local has_slot_red = self.model:GetPsionicEquipSlotRed(self.slot)
if has_slot_red then -- 该位置有装备穿戴红点就要获取能提升的装备
local power_equip = self.model:GetTopPowerUpEquipInBag(self.slot, true)
if power_equip then
UIToolTipMgr:getInstance():AppendPsionicTips(power_equip, x, y, PsionicConst.ArmorItemFlag.Bag)
else
UIToolTipMgr:getInstance():AppendPsionicTips(self.data, x, y, self.flag)
end
else
UIToolTipMgr:getInstance():AppendPsionicTips(self.data, x, y, self.flag)
end
elseif self.show_flag == PsionicConst.TabId.PAdvance
or self.show_flag == PsionicConst.TabId.PWash then
if self.equip_callback then
self.equip_callback(self.slot)
end
elseif self.show_flag == PsionicConst.TabId.PSkill then
if self.skill_callback then
self.skill_callback(self.slot)
end
end
end
-- 根据不同的情况展示不同的红点
function PsionicArmorEquipItem:UpdateArmorRed( )
if not self.is_loaded then return end
if self.show_flag == PsionicConst.TabId.PArmor then
self.red_dot_obj:SetActive(self.model:GetPsionicEquipSlotRed(self.slot))
elseif self.show_flag == PsionicConst.TabId.PAdvance then
self.red_dot_obj:SetActive(self.model:GetPsionicAdvanceRed(self.slot))
elseif self.show_flag == PsionicConst.TabId.PWash then
self.red_dot_obj:SetActive(self.model:GetPsionicWashSlotRed(self.slot))
elseif self.show_flag == PsionicConst.TabId.PSkill then
self.red_dot_obj:SetActive(self.model:GetPsionicSkillSlotRedCache(self.slot))
end
end
function PsionicArmorEquipItem:OnAddBtnClick( )
local has_slot_red = self.model:GetPsionicEquipSlotRed(self.slot)
if has_slot_red then -- 该位置有装备穿戴红点就要获取能提升的装备
local power_equip = self.model:GetTopPowerUpEquipInBag(self.slot, true)
if power_equip then
UIToolTipMgr:getInstance():AppendPsionicTips(power_equip, x, y, PsionicConst.ArmorItemFlag.Bag)
else
OpenFun.Open(139, 7)
end
else
OpenFun.Open(139, 7)
end
end
function PsionicArmorEquipItem:SetSelected(selected)
self.is_selected = selected
if self.is_loaded then
self.selected_obj:SetActive(self.is_selected and self.show_flag ~= PsionicConst.TabId.PArmor)
end
end
function PsionicArmorEquipItem:__delete( )
if self.circle_item then
self.circle_item:DeleteMe()
self.circle_item = nil
end
self:ClearUIEffect(self.equip_effect_con)
end