PsionicWashAttrItem = PsionicWashAttrItem or BaseClass(BaseItem)
local PsionicWashAttrItem = PsionicWashAttrItem
local WordManager = WordManager
function PsionicWashAttrItem:__init(parent_wnd,prefab_asset,layer_name)
self.base_file = "psionic"
self.layout_file = "PsionicWashAttrItem"
self.parent_wnd = parent_wnd
self.layer_name = layer_name
self.last_slot = 0
self.last_val_data = 0
self.no_effect = true
self.model = PsionicModel:getInstance()
self:Load()
end
function PsionicWashAttrItem:Load_callback()
local nodes = {
"attr_icon:img",
"fill:img",
"attr_val:tmp", "attr_name:tmp",
"attr_effect_con",
}
self:GetChildren(nodes)
self:AddEvents()
if self.need_refreshData then
self:UpdateView()
end
end
function PsionicWashAttrItem:AddEvents( )
end
-- 需特殊处理隐藏时的特效表现
function PsionicWashAttrItem:SetVisible(state, force_hide)
BaseItem.SetVisible(self, state, force_hide)
if not state then
self:ClearUIEffect(self.attr_effect_con)
self.showing_attr_effect = false
end
end
function PsionicWashAttrItem:SetData( slot, data, cur_attr_val )
if self.last_slot ~= slot then -- 切换槽位时清空数据
self.last_val_data = 0
self.last_slot = slot
self.no_effect = true
end
self.data = data
self.cur_attr_val = cur_attr_val -- 当前属性值
if self.is_loaded then
self.need_refreshData = false
self:UpdateView()
else
self.need_refreshData = true
end
end
function PsionicWashAttrItem:UpdateView( )
if self.data then
SetAttrIconByColorType(self, self.attr_icon_img, self.data[1], true, 1)
self.fill_img.fillAmount = self.last_val_data / self.data[2]
local temp_last_val_data = self.last_val_data
self.attr_name_tmp.text = WordManager:GetProperties(self.data[1])
local function final_result()
self.attr_val_tmp.text = string.format("%s/%s", ColorUtil.GREEN_DARK,
WordManager:GetPropertyValue(self.data[1], self.cur_attr_val), WordManager:GetPropertyValue(self.data[1], self.data[2]))
self.fill_img.fillAmount = self.cur_attr_val / self.data[2]
end
if temp_last_val_data == self.cur_attr_val then -- 值没有变化,直接用最终结果
final_result()
else
local function duration_callback(percent)
if percent < 1 then
self.attr_val_tmp.text = string.format("%s/%s", ColorUtil.GREEN_DARK,
WordManager:GetPropertyValue(self.data[1], (self.cur_attr_val - temp_last_val_data) * percent + temp_last_val_data),
WordManager:GetPropertyValue(self.data[1], self.data[2]))
else
final_result()
end
end
local function end_callback()
duration_callback(1)
end
local last_progress = self.cur_attr_val / self.data[2]
ImageProgressAction(self.fill, 0, last_progress, 0.5, duration_callback, end_callback)
-- 出现属性变化的洗练item需要每次都播放特效
if not self.no_effect and not self.showing_attr_effect then
local function call_back()
self.showing_attr_effect = false
end
self:ClearUIEffect(self.attr_effect_con)
self:AddUIEffect("ui_jinjiejindu", self.attr_effect_con, self.layer_name, Vector3(-130,0,0), 1, false, 0.75, nil, call_back)
self.showing_attr_effect = true
end
end
self.last_val_data = self.cur_attr_val
-- 加载完第一次后才可以播放特效
self.no_effect = false
end
end
function PsionicWashAttrItem:__delete( )
self:ClearUIEffect(self.attr_effect_con)
end