源战役客户端
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

422 lines
15 KiB

HeadRoleItem = HeadRoleItem or BaseClass(BaseItem)
function HeadRoleItem:__init(parent_wnd, prefab_asset, layer_name)
self.base_file = "uiComponent"
self.layout_file = "HeadRoleItem"
self.is_delay_callback = true
-- self.use_local_view = true
self.vo = nil
self.parent = parent_wnd
self.layer_name = layer_name
self.gray_mat = ShaderTools.gray_mat
self.show_sex = false
self.show_sex_type = 1 -- 性别展示类型 1:左下角带底图 2:左上角无底图
-- 不同背景图片下的背景坐标
self.bg_offsets = {
[1] = {x = 0, y = 0},
[2] = {x = 2, y = -2.5},
[3] = {x = 0, y = 0},
}
self.bg_sizeDelta = {
[1] = {x = 165, y = 165},
[2] = {x = 176, y = 176},
[3] = {x = 165, y = 165},
}
self.duration = 0.1
self.long_click_time = 1500 -- 长按判定时间(毫秒)
self:Load()
end
function HeadRoleItem:__delete( )
if self.bind_wait_for_protocal then
GlobalEventSystem:UnBind(self.bind_wait_for_protocal)
self.bind_wait_for_protocal = nil
end
if self.long_click_timer_id then
GlobalTimerQuest:CancelQuest(self.long_click_timer_id)
self.long_click_timer_id = nil
end
end
function HeadRoleItem:Load_callback()
local node = {
"head",
"head/bg:obj:imgex",
"head/dressBoard:img:obj",
"head/icon:raw", "head/effect", "head/sex_bg:obj",
"head/sex_icon:obj:img",
"head/lv_bg:obj:img", "head/lv_bg/lv:tmp",
"head/career_icon:obj:img",--职业图标
}
self:GetChildren(node)
self.head_size_x = self.head.sizeDelta.x
self.head_size_y = self.head.sizeDelta.y
local function onClickBtnHandler(target, x, y)
if self.vo and not self.long_click_call_back then
self:OnClickFunc( x, y )
end
end
AddClickEvent(self.gameObject, onClickBtnHandler, nil, false)
local function touch_end_func(target,x,y)
if not self.long_click_call_back then return end
local cur_time = TimeUtil:getClientTimeMs( )
if self.vo and cur_time - self.click_start_time <= self.long_click_time then
self:OnClickFunc( x, y )
end
if self.long_click_timer_id then
GlobalTimerQuest:CancelQuest(self.long_click_timer_id)
self.long_click_timer_id = nil
end
end
local function touch_begin_func(target,x,y)
if not self.long_click_call_back then return end
self.click_start_time = TimeUtil:getClientTimeMs( )
local function clockFun()
local cur_time = TimeUtil:getClientTimeMs( )
if cur_time - self.click_start_time > self.long_click_time then
if self.long_click_call_back then
self.long_click_call_back(self.vo)
end
if self.long_click_timer_id then
GlobalTimerQuest:CancelQuest(self.long_click_timer_id)
self.long_click_timer_id = nil
end
end
end
if not self.long_click_timer_id then
self.long_click_timer_id = GlobalTimerQuest:AddPeriodQuest(clockFun, self.duration, -1)
end
clockFun()
end
AddDownEvent(self.gameObject, touch_begin_func)
AddUpEvent(self.gameObject, touch_end_func)
if self.need_refresh then
self:UpdateView()
end
if self.gray_cache ~= nil then
self:SetGray(self.gray_cache)
end
if self.need_effect then
self:SetEffect(self.effect_name, self.eff_layer_name, self.eff_scale, self.mask_id)
end
if self.career_icon_cache ~= nil then
self:SetCareerIconVisible(self.career_icon_cache)
end
end
--[[
2019年11月29日修改 : 通用头像的参数改为一个table,参数名不变
data = {
vo, -- 玩家头像的具体参数
show_tip, -- 是否可以查看玩家数据,默认可以
custom_callback, -- 自己传callback
use_bg, -- 使用的背景图片的类型,如果自己加了新样式在记得上面的self.bg_offsets中添加自己的新背景图片坐标
}
vo范例
vo = {
id = RoleManager.Instance.mainRoleInfo.role_id,
server_id = RoleManager.Instance.mainRoleInfo.server_id,
career = RoleManager.Instance.mainRoleInfo.career,
sex = RoleManager.Instance.mainRoleInfo.sex,
turn = RoleManager.Instance.mainRoleInfo.turn,
picture_ver = RoleManager.Instance.mainRoleInfo.picture_ver, --不支持自定义头像,此字段废弃
picture = RoleManager.Instance.mainRoleInfo.picture, --不支持自定义头像,此字段废弃
profile_photo_id = RoleManager.Instance.mainRoleInfo.profile_photo_id,
dress_board_id = ChatDressModel:getInstance().use_dress_list[2],--头像框id,默认为0(无头像框)
level = RoleManager.Instance.mainRoleInfo.level,
do_not_click = true,--不可点击
empty_head = false, -- 是否是空数据头像
not_show_level = true
}
]]
function HeadRoleItem:SetData(data)
-- data.vo = data.vo
-- data.vo.turn = data.vo.turn or 0
local temp_vo = {}
if data and data.vo then
temp_vo = data.vo
elseif data then
temp_vo = data
end
self.vo = temp_vo
-- self.vo.turn = data.vo and data.vo.turn or 0
-- 这两个暂时废弃
self:SetSomeInfo(data)
self:UpdateView()
end
--[[
通过角色id展示头像,数据格式和SetData一样,module_id填自己的标记id,防混
--]]
function HeadRoleItem:SetShowByRoleId( data )
local temp_vo = {}
if data and data.vo then
temp_vo = data.vo
elseif data then
temp_vo = data
end
self.vo = temp_vo
self.module_id = data.module_id or 0
-------------------------
self:SetSomeInfo(data)
if (self.vo.role_id or self.vo.id) then
self.wait_for_protocal = true
-------------------------
if not self.bind_wait_for_protocal then
local function ANS_OTHER_HEAD_INFO( head_data )
if self._use_delete_method then return end
if head_data.mod ~= self.module_id then return end
-------------------------
self.vo = self.vo or {}
for k,v in pairs(head_data) do
self.vo[k] = v
end
self:UpdateView()
-------------------------
if self.bind_wait_for_protocal then
GlobalEventSystem:UnBind(self.bind_wait_for_protocal)
self.bind_wait_for_protocal = nil
end
self.wait_for_protocal = nil
end
self.bind_wait_for_protocal = GlobalEventSystem:Bind(EventName.ANS_OTHER_HEAD_INFO,ANS_OTHER_HEAD_INFO)
GlobalEventSystem:Fire( EventName.REQ_OTHER_HEAD_INFO, self.module_id, (self.vo.role_id or self.vo.id) )
end
else
Message.show("缺少角色信息~")
end
end
function HeadRoleItem:SetSomeInfo( data )
self.bg_size = data.bg_size
self.icon_size = data.icon_size
----------------
self.show_tip = data.show_tip == nil and true or data.show_tip --默认弹提示
self.not_show_level = data.not_show_level
self.do_not_click = data.do_not_click or (self.vo and self.vo.do_not_click)
self.custom_callback = data.custom_callback
-- self.use_bg = data.use_bg or (self.vo and self.vo.use_bg) or 1 -- 使用的背景样式(1为白底渐变外框正方形)
self.use_bg = 3--20201026头像背景写死为3
end
function HeadRoleItem:UpdateView()
if not self.vo then return end
if not self.is_loaded then
self.need_refresh = true
return
end
local vo = self.vo
self.bg_imgex.raycastTarget = not self.do_not_click and true or false
-- 选择好需要使用的背景图
lua_resM:setImageSprite(self, self.bg_imgex, "uiComponent_asset", "pw_ckxx_0"..self.use_bg)
SetAnchoredPosition(self.bg, self.bg_offsets[self.use_bg].x, self.bg_offsets[self.use_bg].y)
SetSizeDeltaX(self.bg, self.bg_sizeDelta[self.use_bg].x)
SetSizeDeltaY(self.bg, self.bg_sizeDelta[self.use_bg].y)
-- 暂时废弃这段逻辑
-- if self.bg_size then
-- if self.use_bg == 1 then
-- self.bg.sizeDelta = self.bg_size
-- elseif self.use_bg == 2 then
-- self.bg2.sizeDelta = self.bg_size
-- end
-- end
-- if self.icon_size then
-- self.icon.sizeDelta = self.icon_size
-- end
------------------
-- print("Saber:HeadRoleItem [start:127] vo ------------------------------------------")
-- PrintTable(vo)
--头像
if self.vo.empty_head then
self.icon.gameObject:SetActive(false)
self.dressBoard_obj:SetActive(false)
else
self.icon.gameObject:SetActive(true)
-- if vo.career and vo.sex and vo.turn and vo.career ~= 0 and vo.sex ~= 0 then
CustomRoleHead:getInstance():Create(self, self.icon_raw, vo.id or vo.role_id, vo.career, vo.sex, vo.turn, nil, vo.picture_ver, vo.picture, false, vo.profile_photo_id)
-- end
--头像框
if (vo.dress_board_id and vo.dress_board_id ~=0 and vo.dress_board_id ~= 420001) or
(vo.dress_id and vo.dress_id ~=0 and vo.dress_id ~= 420001) then
local id = vo.dress_board_id or vo.dress_id
lua_resM:setOutsideImageSprite(self,self.dressBoard_img,GameResPath.GetChatDressIcon(id),false)
self.dressBoard_obj:SetActive(true)
else
-- lua_resM:setImageSprite(self, self.dressBoard_img, "uiComponent_asset","com_empty", false)
self.dressBoard_obj:SetActive(false)
end
--职业 (策划说先屏蔽了 2020.10.21 by msh)
self.career_icon_obj:SetActive(false)
-- if vo.career and vo.career ~= 0 then
-- self.career_icon_obj:SetActive(true)
-- lua_resM:setImageSprite(self, self.career_icon_img, "common_asset","common_career_"..vo.career)
-- else
-- self.career_icon_obj:SetActive(false)
-- end
if self.custom_callback then
self.custom_callback()
end
end
--设置大小
self:SetItemSize()
self:SetSexConShow(self.show_sex, self.show_sex_type)
if RoleManager and RoleManager.Instance and RoleManager.Instance.mainRoleInfo.level < Config.Modulesub["110@2"].open_lv then
if self.lv_bg_obj.activeSelf then
self.lv_bg_obj:SetActive(false)
end
self.lv_tmp.text = ""
else
self.lv_bg_obj:SetActive(vo.level and vo.level~=0 and true or false)
self.lv_tmp.text = vo.level or ""
end
--AI管家:不显示AI管家的等级
if vo.id == 1 then
self.lv_tmp.text = ""
end
if self.not_show_level then
self.lv_tmp.text = ""
self.lv_bg_obj:SetActive(false)
end
end
function HeadRoleItem:SetGray(bool)
if self.is_loaded then
local mat = bool and self.gray_mat or nil
self.icon_raw.material = mat
self.dressBoard_img.material = mat
SetImageGray(self.lv_bg_img,bool)
SetImageGray(self.career_icon_img,bool)
SetImageGray(self.bg_imgex,bool)
else
self.gray_cache = bool
end
end
function HeadRoleItem:SetItemSize(x, y)
self.now_size_x = tonumber(x) or self.now_size_x or self.head_size_x
self.now_size_y = tonumber(y) or self.now_size_y or self.head_size_y
if self.is_loaded then
local x_ratio = self.now_size_x / self.head_size_x
local y_ratio = self.now_size_y / self.head_size_y
self.head.localScale = Vector2(x_ratio, y_ratio)
end
end
function HeadRoleItem:SetSexConShow(show, show_type)
self.show_sex = show or self.show_sex
self.show_sex_type = show_type or self.show_sex_type
if self.is_loaded then
if show then
self.sex_icon_obj:SetActive(true)
if self.show_sex_type == 1 then
self.sex_bg_obj:SetActive(true)
SetAnchoredPositionY(self.sex_icon, -55)
elseif self.show_sex_type == 2 then
self.sex_bg_obj:SetActive(false)
SetAnchoredPositionY(self.sex_icon, 58)
SetLocalScale(self.sex_icon, 0.8, 0.8, 0.8)
end
lua_resM:setImageSprite(self, self.sex_icon_img, "uiComponent_asset", "headrole_sex_"..(self.vo and self.vo.sex or 1), true)
else
self.sex_icon_obj:SetActive(false)
self.sex_bg_obj:SetActive(false)
end
end
end
function HeadRoleItem:SetEffect(effect_name, layer_name, scale, mask_id)
self.effect_name = effect_name
self.eff_layer_name = layer_name
self.eff_scale = scale
self.mask_id = mask_id
if self.is_loaded then
local function load_end_func()
end
--没有传mask_id而且要显示特效的情况才去获取mask_id
if not self.mask_id then
local p_wnd = self.parent
repeat
p_wnd = p_wnd.parent
if p_wnd and p_wnd.parent then
local rect = p_wnd.parent:GetComponent(typeof(UnityEngine.UI.ScrollRect))
if rect then
if p_wnd:GetComponent("EffectMask") then
self.mask_id = 1
else
local image = p_wnd:GetComponent("Image")
if image then
self.mask_id = self:RegisterMask(image)
end
end
end
end
until not p_wnd or self.mask_id
end
self:AddUIEffect(effect_name, self.effect, layer_name or "UI", nil, scale or 1, true, nil, self.mask_id, nil, load_end_func)
self.need_effect = false
else
self.need_effect = true
end
end
function HeadRoleItem:SetCareerIconVisible( flag )
if not self.is_loaded then
self.career_icon_cache = flag
return
end
if self.career_icon_obj then
self.career_icon_obj:SetActive(flag)
end
end
function HeadRoleItem:SetClickCall( call_back )
self.call_back = call_back
end
-- 设置长按事件
function HeadRoleItem:SetLongClickCall( call_back )
self.long_click_call_back = call_back
end
-- 单击轻点
function HeadRoleItem:OnClickFunc( x, y )
if self.do_not_click then
return
end
if self.call_back then
self.call_back(self.vo)
return
end
local role_id = self.vo.id or self.vo.role_id
--AI管家:role_id==1是AI管家的情况,这种情况不能打开交互面板
if self.show_tip and role_id ~= RoleManager.Instance.mainRoleInfo.role_id and role_id ~= 1 then
-- print("-------self.vo.server_id ~= RoleManager.Instance.mainRoleInfo.server_id",role_id , RoleManager.Instance.mainRoleInfo.server_id)
-- if self.vo.server_id and self.vo.server_id ~= RoleManager.Instance.mainRoleInfo.server_id then
-- Message.show("无法查看跨服玩家信息")
-- return
-- end
if RoleManager.Instance.mainRoleInfo.level < Config.Modulesub["110@2"].open_lv then
Message.show("查看功能未开放")
return
end
--请求协议获取对方信息
if role_id then
SocialityModel:getInstance():Fire(SocialityModel.REQUEST_OTHER_INFO, role_id, x, y, self.vo.info)
end
end
end