ChatDressSubView = ChatDressSubView or BaseClass(BaseItem)
|
|
local ChatDressSubView = ChatDressSubView
|
|
local table_insert = table.insert
|
|
function ChatDressSubView:__init()
|
|
self.base_file = "chatDress"
|
|
self.layout_file = "ChatDressSubView"
|
|
self.model = ChatDressModel:GetInstance()
|
|
self.model:Fire(ChatDressEvent.REQUEST_DRESS_INFO, 1)
|
|
self.model:Fire(ChatDressEvent.REQUEST_DRESS_INFO, 2)
|
|
self.mainVo = RoleManager.Instance.mainRoleInfo
|
|
self.full_screen = true
|
|
self.ani_left = -200
|
|
self.ani_right = 400
|
|
self.adjust_mid = {left = 50, right = 640}
|
|
self.tab_data = {
|
|
[1] = {name = "头像", id = ChatDressSubType.ROLE_HEAD},
|
|
[2] = {name = "相框", id = ChatDressSubType.HEAD},
|
|
[3] = {name = "气泡", id = ChatDressSubType.BUBBLE},
|
|
}
|
|
self.cur_select_index = nil
|
|
self.cur_select_tab = nil
|
|
self.cur_select_data = nil
|
|
self.tab_item_list = {}
|
|
self:Load()
|
|
end
|
|
|
|
function ChatDressSubView:Load_callback()
|
|
self.nodes = {
|
|
"right/item_scroll/Viewport/item_con","right/item_scroll","right/attr_scroll/Viewport/attr_con",
|
|
"right/attr_scroll","right/bg:raw","mid/name_text:tmp",
|
|
"left/tab_con","mid/power_text:txt","right/btn/btn_red:obj","right/btn/btn_text:tmp","right/btn:obj:imgex",
|
|
"mid/holder/bubble_con:img:obj", "mid/holder/head_con:obj", "mid/holder/mid_text:tmp", "mid/holder:obj",
|
|
"mid/text:tmp",
|
|
-------------------------
|
|
"right/wear_btn:obj:img","right/active_image:obj", "right/desc_text:tmp",
|
|
--下面的物品消耗
|
|
"right/cost_con:obj","right/cost_con/cost_name_text:tmp","right/cost_con/num_text:tmp",
|
|
"right/cost_con/cost_item_con",
|
|
}
|
|
self:GetChildren(self.nodes)
|
|
lua_resM:setOutsideRawImage(self,self.bg_raw,GameResPath.GetViewBigBg("designation_bg"),false)
|
|
self.award_item = UIObjPool:getInstance():PopItem(UIObjPool.UIType.AwardItem,self.cost_item_con)
|
|
self.award_item:SetItemSize(62, 62)
|
|
self:StartAction()
|
|
self:AddEvents()
|
|
if self.need_refreshData then
|
|
self:UpdateView()
|
|
end
|
|
end
|
|
|
|
function ChatDressSubView:AddEvents( )
|
|
local function on_click( target )
|
|
if self.btn_obj == target then
|
|
if self.active_state == ChatDressModel.AcitiveState.CanActive then
|
|
if self.cur_select_data then
|
|
if self.cur_select_tab ~= 1 then
|
|
self.model:Fire(ChatDressEvent.DRESS_ACTIVATE, self.cur_select_data.dress_id) -- 激活
|
|
else
|
|
GlobalEventSystem:Fire(EventName.REQ_ACTIVATE_ROLEHEAD, self.cur_select_data.dress_id)
|
|
end
|
|
end
|
|
else
|
|
if self.go_active_goods then
|
|
UIToolTipMgr:getInstance():AppendGoodsTips(self.go_active_goods, x, y,nil,nil,nil,false,true)
|
|
end
|
|
end
|
|
elseif self.wear_btn_obj == target then
|
|
if self.cur_select_data then
|
|
if self.cur_select_tab ~= 1 then
|
|
local data = {
|
|
dress_id = self.cur_select_data.dress_id
|
|
}
|
|
self.model:Fire(ChatDressEvent.USE_DRESS, data) -- 保存至使用
|
|
else
|
|
GlobalEventSystem:Fire(EventName.REQ_CHANGE_ROLEHEAD, self.cur_select_data.dress_id)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
AddClickEvent(self.btn_obj, on_click)
|
|
AddClickEvent(self.wear_btn_obj, on_click)
|
|
|
|
local function on_update_view( )
|
|
self.force_update = true
|
|
self:UpdateView()
|
|
end
|
|
self:BindEvent(self.model, ChatDressEvent.DRESS_ACTIVATE_SUCCESS, on_update_view)
|
|
|
|
local function on_update_wear( )
|
|
self:UpdateRightInfo()
|
|
end
|
|
self:BindEvent(self.model, ChatDressEvent.USE_DRESS_SUCCESS, on_update_view)
|
|
end
|
|
|
|
function ChatDressSubView:UpdateView( )
|
|
self:SetTabCon()
|
|
self:SetSelectTab(self.cur_select_tab or 1)
|
|
end
|
|
|
|
function ChatDressSubView:UpdateRightItem( )
|
|
if not self.item_list_com then
|
|
self.item_list_com = self:AddUIComponent(UI.ItemListCreator)
|
|
end
|
|
if self.need_reset then
|
|
self.item_list_com:Reset()
|
|
self.need_reset = false
|
|
end
|
|
local cur_type = self.tab_data[self.cur_select_tab].id
|
|
local dress_list_config = self.model:GetChatDressFigure(self.tab_data[self.cur_select_tab].id)
|
|
---------排序
|
|
self.dress_list = {}
|
|
local list1 = {} -- 可以激活
|
|
local list2 = {} -- 已经激活
|
|
local list3 = {} -- 未激活且目前不可以激活
|
|
for k,v in pairs(dress_list_config) do
|
|
if self.model:CanActivate(self.tab_data[self.cur_select_tab].id,v.dress_id) and v.is_default ~= 1 then--默认的排除
|
|
table_insert(list1,v)
|
|
list1[#list1].can_active = true
|
|
list1[#list1].is_active = false
|
|
elseif self.model:FindDressIsActive(self.tab_data[self.cur_select_tab].id,v.dress_id) then
|
|
table_insert(list2,v)
|
|
list2[#list2].is_active = true
|
|
list2[#list2].can_active = false
|
|
else
|
|
--未激活且目前不可激活的 需要判断是否是开放时间
|
|
local cur_time = TimeUtil:getServerTime( )
|
|
local open_day = ServerTimeModel:getInstance():GetOpenServerDay()
|
|
if v.open_time <= cur_time and v.open_day <= open_day then
|
|
table_insert(list3,v)
|
|
list3[#list3].is_active = false
|
|
list3[#list3].can_active = false
|
|
end
|
|
end
|
|
end
|
|
local sort_func = function ( a, b )
|
|
return a.sequence < b.sequence
|
|
end
|
|
table.sort(list1, sort_func)
|
|
table.sort(list2, sort_func)
|
|
table.sort(list3, sort_func)
|
|
|
|
for k,v in ipairs(list1) do
|
|
table_insert(self.dress_list,v)
|
|
end
|
|
for k,v in ipairs(list2) do
|
|
table_insert(self.dress_list,v)
|
|
end
|
|
for k,v in ipairs(list3) do
|
|
table_insert(self.dress_list,v)
|
|
end
|
|
local jump_info = self.model:GetJumpInfo()
|
|
if jump_info then
|
|
for i,v in ipairs(self.dress_list) do
|
|
if v.dress_id == jump_info then
|
|
self.cur_select_index = i
|
|
self.cur_select_data = v
|
|
end
|
|
end
|
|
self.model:CleanJumpInfo()
|
|
end
|
|
if not self.cur_select_index then--没有选中就要选中自己目前穿戴的东西
|
|
local wear_id = self.model:GetCurUseDressId(self.tab_data[self.cur_select_tab].id)
|
|
for i,v in ipairs(self.dress_list) do
|
|
if v.dress_id == wear_id then
|
|
self.cur_select_index = i--拿选中的称号配置数据
|
|
self.cur_select_data = v--拿选中的称号配置数据
|
|
break
|
|
end
|
|
end
|
|
if not self.cur_select_index then
|
|
self.cur_select_index = 1
|
|
self.cur_select_data = self.dress_list[1]--拿选中的称号配置数据
|
|
end
|
|
else
|
|
if not jump_info then
|
|
for i,v in ipairs(self.dress_list) do
|
|
if i == self.cur_select_index then
|
|
self.cur_select_data = v--拿选中的称号配置数据
|
|
break
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
local function call_back( index,data )
|
|
self:SetSelectItem(index,data)
|
|
end
|
|
local function load_all_callback( )
|
|
self:SetSelectItem(self.cur_select_index,self.cur_select_data)
|
|
end
|
|
local info = {
|
|
data_list = self.dress_list,
|
|
item_con = self.item_con,
|
|
item_class = ChatDressItem,
|
|
item_width = 114,
|
|
item_height = 116,
|
|
space_x = 10,
|
|
space_y = 10,
|
|
start_x = 16,
|
|
start_y = -12,
|
|
scroll_view = self.item_scroll.transform,
|
|
create_frequency = 0,
|
|
is_scroll_back_on_update = false,
|
|
final_callback = load_all_callback,
|
|
on_update_item = function(item, i, v)
|
|
item:SetData(i, v, call_back)
|
|
item:SetSelect(self.cur_select_index)
|
|
end,
|
|
}
|
|
self.item_list_com:UpdateItems(info)
|
|
end
|
|
|
|
function ChatDressSubView:SetSelectItem( index,data )
|
|
self.cur_select_index = index
|
|
self.cur_select_data = data
|
|
self.item_list_com:IterateItems(function ( item )
|
|
item:SetSelect(self.cur_select_index)
|
|
end)
|
|
self:UpdateRightInfo()
|
|
end
|
|
|
|
|
|
function ChatDressSubView:UpdateRightInfo( )
|
|
local data = self.cur_select_data
|
|
if not data then
|
|
print("HWR:ChatDressSubView [163]data: ",data)
|
|
return
|
|
end
|
|
local attr_list = stringtotable(data.dress_starup_attr or data.dress_attr)
|
|
self.power_text_txt.text = GetFighting(attr_list,true)
|
|
self.desc_text_tmp.text = Trim(data.dress_desc)
|
|
self.go_active_goods = data.dress_consume_id
|
|
self:ShowDressImg()
|
|
if not self.attr_list_com then
|
|
self.attr_list_com = self:AddUIComponent(UI.ItemListCreator)
|
|
end
|
|
local child_names = {
|
|
"attr_text:tmp",
|
|
}
|
|
local info = {
|
|
data_list = attr_list,
|
|
item_con = self.attr_con,
|
|
prefab_ab_name = "chatDress",
|
|
prefab_res_name = "ChatDressPropItem",
|
|
item_width = 180,
|
|
item_height = 28,
|
|
space_x = 11,
|
|
space_y = 0,
|
|
start_x = 20,
|
|
start_y = -8,
|
|
scroll_view = self.attr_scroll,
|
|
create_frequency = 0.05,
|
|
is_scroll_back_on_update = false,
|
|
child_names = child_names,
|
|
on_update_item = function(item, i, v)
|
|
self:UpdateAttrItem(item,i,v)
|
|
end,
|
|
}
|
|
self.attr_list_com:UpdateItems(info)
|
|
local active_state = nil
|
|
self.item_list_com:IterateItems(function ( item )
|
|
if data.dress_id == item:GetId() then
|
|
active_state = item:GetActiveState()
|
|
end
|
|
end)
|
|
self.active_state = active_state
|
|
self.wear_btn_obj:SetActive(self.model:GetCurUseDressId(data.dress_type) ~= data.dress_id)
|
|
self.cost_con_obj:SetActive(false)
|
|
self.btn_red_obj:SetActive(false)
|
|
self.btn_obj:SetActive(false)
|
|
self.btn_imgex.gray = false
|
|
self.active_image_obj:SetActive(active_state == ChatDressModel.AcitiveState.Actived)--永久激活的就显示这个图片
|
|
if active_state == ChatDressModel.AcitiveState.Locked then
|
|
self.btn_text_tmp.text = "激活"
|
|
self.btn_obj:SetActive(true)
|
|
if data.dress_consume_id > 0 then
|
|
self.award_item:SetData(data.dress_consume_id,1)
|
|
local num = GoodsModel:getInstance():GetTypeGoodsNum(data.dress_consume_id)
|
|
local color_str = ColorUtil.RED_DARK
|
|
local need_num = 1
|
|
if num >= need_num then
|
|
color_str = ColorUtil.GREEN_DARK
|
|
end
|
|
local num_str = string.format("%s/%s", HtmlColorTxt(num, color_str), need_num)
|
|
self.num_text_tmp.text = num_str
|
|
self.cost_name_text_tmp.text = GoodsModel:getInstance():getGoodsName(data.dress_consume_id, true)
|
|
self.cost_con_obj:SetActive(true)
|
|
end
|
|
elseif active_state == ChatDressModel.AcitiveState.CanActive then
|
|
if data.dress_consume_id > 0 then
|
|
self.award_item:SetData(data.dress_consume_id,1)
|
|
local num = GoodsModel:getInstance():GetTypeGoodsNum(data.dress_consume_id)
|
|
local color_str = ColorUtil.RED_DARK
|
|
local need_num = 1
|
|
if num >= need_num then
|
|
color_str = ColorUtil.GREEN_DARK
|
|
end
|
|
local num_str = string.format("%s/%s", HtmlColorTxt(num, color_str), need_num)
|
|
self.num_text_tmp.text = num_str
|
|
self.cost_name_text_tmp.text = GoodsModel:getInstance():getGoodsName(data.dress_consume_id, true)
|
|
self.cost_con_obj:SetActive(true)
|
|
end
|
|
self.btn_text_tmp.text = "激活"
|
|
self.btn_obj:SetActive(true)
|
|
self.btn_red_obj:SetActive(true)
|
|
else
|
|
self.btn_red_obj:SetActive(false)
|
|
self.btn_obj:SetActive(false)
|
|
end
|
|
end
|
|
|
|
function ChatDressSubView:UpdateAttrItem(item,i,v)
|
|
local _, name, _, val = WordManager:GetPropertyInfo(v[1], v[2])
|
|
local str = string.format("%s %s", name, HtmlColorTxt("+"..val, ColorUtil.WHITE_DARK))
|
|
item.attr_text_tmp.text = str
|
|
end
|
|
|
|
function ChatDressSubView:SetTabCon( )
|
|
local y_offset = 66
|
|
local function call_back( index )
|
|
self.need_reset = true
|
|
self.cur_select_index = nil
|
|
self:SetSelectTab(index)
|
|
end
|
|
for i=1,#self.tab_data do
|
|
local item = self.tab_item_list[i]
|
|
if not item then
|
|
item = ChatDressVerTabItem.New(self.tab_con)
|
|
self.tab_item_list[i] = item
|
|
end
|
|
item:SetData(i,self.tab_data[i], call_back)
|
|
item:SetPosition(0, -(i-1) * y_offset)
|
|
end
|
|
end
|
|
|
|
function ChatDressSubView:SetSelectTab( index )
|
|
if self.cur_select_tab == index and not self.force_update then
|
|
return
|
|
end
|
|
self.force_update = false
|
|
for i,v in ipairs(self.tab_item_list) do
|
|
v:SetSelect(i == index)
|
|
end
|
|
self.cur_select_tab = index
|
|
self.cur_select_index = nil
|
|
-------------------------
|
|
-- local list = self.model:GetChatDressFigure(self.tab_data[self.cur_select_tab].id) or {}
|
|
-- for i,v in pairsByKeys(list) do
|
|
-- if i == self.cur_select_index then
|
|
-- self.cur_select_data = v--拿选中的配置数据
|
|
-- break
|
|
-- end
|
|
-- end
|
|
-------------------------
|
|
self.text_tmp.text = string.format("%s战力", self.tab_data[self.cur_select_tab].name)
|
|
self:UpdateRightItem()
|
|
self:SetSelectItem(self.cur_select_index, self.cur_select_data)
|
|
end
|
|
|
|
function ChatDressSubView:SetData(index, sub_index )
|
|
if sub_index == 0 then--有这个东西 意味着是道具跳转进来的
|
|
self.jump_info = self.model:GetJumpInfo()
|
|
elseif sub_index then
|
|
--跳转到对应页签
|
|
self.cur_select_tab = sub_index or self.cur_select_tab
|
|
self.force_update = true
|
|
end
|
|
if TableSize(self.jump_info) > 0 then
|
|
self.cur_select_tab = self.jump_info.main_type
|
|
self.force_update = true
|
|
end
|
|
if self.is_loaded then
|
|
self.need_refreshData = false
|
|
self:UpdateView()
|
|
else
|
|
self.need_refreshData = true
|
|
end
|
|
end
|
|
|
|
function ChatDressSubView:StartAction( )
|
|
SetAnchoredPositionY( self.holder.transform, 0 )
|
|
local do_up,do_down
|
|
function do_up()
|
|
self.tween_id1 = TweenLite.to(self, self.holder.transform,TweenLite.UiAnimationType.ANCHORED_POSY,0,2,do_down)
|
|
end
|
|
function do_down()
|
|
self.tween_id2 = TweenLite.to(self, self.holder.transform,TweenLite.UiAnimationType.ANCHORED_POSY,20,2,do_up)
|
|
end
|
|
do_down()
|
|
end
|
|
|
|
function ChatDressSubView:ShowDressImg()
|
|
local data = self.cur_select_data
|
|
if not data then
|
|
return
|
|
end
|
|
local type = self.tab_data[self.cur_select_tab].id
|
|
local dress_id = data.dress_id
|
|
self.bubble_con_obj:SetActive(type == ChatDressSubType.BUBBLE)
|
|
self.head_con_obj:SetActive(type ~= ChatDressSubType.BUBBLE)
|
|
self.name_text_tmp.text = data.dress_name
|
|
if type == ChatDressSubType.BUBBLE then
|
|
-- self.mid_text_tmp.text = HtmlColorTxt(data.dress_desc, ColorUtil.GREEN_DARK)
|
|
SetSizeDelta(self.bubble_con, 400, 100)
|
|
-- SetSizeDelta(self.bubble_con, self.mid_text_tmp.preferredWidth + 50, self.mid_text_tmp.preferredHeight + 30)
|
|
-- ---不同框的偏移
|
|
-- local addTable = Config.ConfigChatDress.Pos[tostring(dress_id)]
|
|
-- SetSizeDeltaX(self.bubble_con, GetSizeDeltaX(self.bubble_con) + addTable.size_x )
|
|
-- SetSizeDeltaY(self.bubble_con, GetSizeDeltaY(self.bubble_con) + addTable.size_y )
|
|
if dress_id then -- 0为后端传来的空
|
|
lua_resM:setOutsideImageSprite(self, self.bubble_con_img, GameResPath.GetChatDressIcon(dress_id), false)
|
|
end
|
|
elseif type == ChatDressSubType.HEAD then
|
|
self.mid_text_tmp.text = ""
|
|
if not self.mainRoleHeadItem then
|
|
self.mainRoleHeadItem = HeadRoleItem.New(self.head_con)
|
|
self.mainRoleHeadItem:SetItemSize(200,200)
|
|
end
|
|
local head_data = {
|
|
vo = {id = self.mainVo.role_id, use_bg = 3, career = 0, sex = self.mainVo.sex, turn = self.mainVo.turn, dress_board_id = dress_id, profile_photo_id = self.mainVo.profile_photo_id},
|
|
}
|
|
self.mainRoleHeadItem:SetData(head_data)
|
|
elseif type == ChatDressSubType.ROLE_HEAD then
|
|
self.mid_text_tmp.text = ""
|
|
if not self.mainRoleHeadItem then
|
|
self.mainRoleHeadItem = HeadRoleItem.New(self.head_con)
|
|
self.mainRoleHeadItem:SetItemSize(200,200)
|
|
end
|
|
local head_data = {
|
|
vo = {id = self.mainVo.role_id, use_bg = 3, career = 0, sex = self.mainVo.sex, turn = self.mainVo.turn, dress_board_id = self.mainVo.dress_board, profile_photo_id = dress_id},
|
|
}
|
|
self.mainRoleHeadItem:SetData(head_data)
|
|
end
|
|
end
|
|
|
|
function ChatDressSubView:__delete( )
|
|
if not self.model.is_enter_view then --刷一次红点
|
|
self.model.is_enter_view = true
|
|
WardrobeModel:GetInstance():Fire(WardrobeConst.UPDATE_RED_DOT, WardrobeConst.TabId.DRESS)
|
|
end
|
|
for i,v in ipairs(self.tab_item_list) do
|
|
v:DeleteMe()
|
|
v = nil
|
|
end
|
|
self.tab_item_list = {}
|
|
|
|
if self.on_update_view_id then
|
|
self.model:UnBind(self.on_update_view_id)
|
|
self.on_update_view_id = nil
|
|
end
|
|
|
|
if self.on_update_wear_id then
|
|
self.model:UnBind(self.on_update_wear_id)
|
|
self.on_update_wear_id = nil
|
|
end
|
|
|
|
if self.tween_id1 then
|
|
TweenLite.Stop(self.tween_id1)
|
|
self.tween_id1 = nil
|
|
end
|
|
|
|
if self.tween_id2 then
|
|
TweenLite.Stop(self.tween_id2)
|
|
self.tween_id2 = nil
|
|
end
|
|
|
|
if self.mainRoleHeadItem then
|
|
self.mainRoleHeadItem:DeleteMe()
|
|
self.mainRoleHeadItem = nil
|
|
end
|
|
end
|