源战役客户端
您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符
 
 
 
 
 

215 行
7.6 KiB

-- <*
-- @Author: Saber
-- @Description: 舞姿激活界面
-- *>
DancePoseView = DancePoseView or BaseClass(BaseView)
local DancePoseView = DancePoseView
local stringtotable = stringtotable
function DancePoseView:__init()
self.base_file = "dance"
self.layout_file = "DancePoseView"
self.layer_name = "Activity"
self.destroy_imm = true
self.use_background = true --全屏界面默认使用这个参数,非全屏界面自行设置
self.change_scene_close = true
self.is_set_zdepth = true
self.model = DanceModel:getInstance()
self.goods_model = GoodsModel:getInstance()
self.loaded_role_model = nil
self.open_dance_id = nil
self.open_type_id = nil
self.load_callback = function ()
self:LoadSuccess()
self:AddEvent()
end
self.open_callback = function ( )
self:UpdateView()
end
self.destroy_callback = function ( )
self:DestroySuccess()
end
end
-- 可选参数(二选一)
-- open_dance_id 定位的舞姿
-- open_type_id 定位的舞姿的物品id
function DancePoseView:Open(open_dance_id, open_type_id)
self.open_dance_id = open_dance_id
self.open_type_id = open_type_id
BaseView.Open(self)
end
function DancePoseView:LoadSuccess()
local nodes = {
"bg:raw",
"role_con",
"close_btn:obj",
"ques_btn:obj",
"pose_scroll", "pose_scroll/Viewport/pose_con",
"activated:obj",
"activate_con:obj",
"activate_con/activate_btn:obj",
"activate_con/activate_btn/activate_btn_red:obj",
"activate_con/item_con",
"activate_con/item_name:tmp", "activate_con/item_neednum:tmp",
"pose_desc:tmp",
}
self:GetChildren(nodes)
lua_resM:setOutsideRawImage(self, self.bg_raw, GameResPath.GetViewBigBg("dance_bg"))
self.award_item = UIObjPool:getInstance():PopItem(UIObjPool.UIType.AwardItem, self.item_con)
self.award_item:SetItemSize(62, 62)
self.award_item:SetAnchoredPosition(0, 0)
self.award_item:SetVisible(true)
end
function DancePoseView:AddEvent()
local function click_event(target)
if target == self.close_btn_obj then
self:Close()
elseif target == self.ques_btn_obj then -- 介绍按钮
GlobalEventSystem:Fire(EventName.OPEN_INSTRUCTION_VIEW, 42500)
elseif target == self.activate_btn_obj then -- 激活按钮
if self.item_data then
local bool = self.model:GetDanceRedByDanceId(self.item_data.id)
if bool then
self.model:Fire(DanceModel.REQUEST_CCMD_EVENT, 42501, self.item_data.id)
else
if self.award_item then
self.award_item:ClickCallFun()
end
end
end
end
end
AddClickEvent(self.close_btn_obj, click_event)
AddClickEvent(self.ques_btn_obj, click_event)
AddClickEvent(self.activate_btn_obj, click_event)
local function updateDacneData()
self:UpdatePosesItem()
end
self:BindEvent(self.model, DanceModel.UPDATE_DANCE_POSES_DATA, updateDacneData)
self:BindEvent(self.model, DanceModel.ACTIVATED_DANCE_POSE, updateDacneData)
end
function DancePoseView:UpdateView()
self:UpdatePosesItem()
end
-- 更新姿势节点
function DancePoseView:UpdatePosesItem( )
-- 这个不需要深拷贝
local data = self.model:GetDancePoseDataList()
local function dance_callback(item_data)
self.pose_item_creator:IterateItems(function(item, i)
item:SetSelected(item_data.id)
end)
self:UpdateRoleDance(item_data.id)
self:UpdatePoseCostInfoAndDesc(item_data)
end
self.pose_item_creator = self.pose_item_creator or self:AddUIComponent(UI.ItemListCreator)
local info = {
data_list = data,
scroll_view = self.pose_scroll,
item_con = self.pose_con,
item_class = DancePoseItem,
item_height = 112,
item_width = 112,
start_x = 10,
start_y = -1,
space_x = 13,
space_y = 13,
create_frequency = 0.01,
is_scroll_back_on_update = true,
alignment = UnityEngine.TextAnchor.UpperLeft,
on_update_item = function(item, i, v)
item:SetData(v, dance_callback)
end,
final_callback = function()
-- 初次加载完,定位到默认舞姿或打开界面时要看的舞姿
local default_dance_id = self.open_dance_id or self.model:GetDefaultDancesPoseId()
for k, v in ipairs(data) do
if self.open_type_id then
if v.goods_data and tonumber(v.goods_data[2]) == self.open_type_id then
dance_callback(v)
break
end
else
if v.id == default_dance_id then
dance_callback(v)
break
end
end
end
self.open_dance_id = nil
self.open_type_id = nil
end,
}
self.pose_item_creator:UpdateItems(info)
end
-- 更新玩家舞姿
function DancePoseView:UpdateRoleDance(dance_id)
local dance_pose = "dance"
if dance_id > 1 then -- 舞姿1的名称为dance,特殊处理
dance_pose = dance_pose .. dance_id
end
if not self.loaded_role_model then
-- 先清除引用模型
lua_resM:clearRoleMode(self)
-- 加载模型
local res_data = {
father_node = self,
layer_name = self.layer_name,
transform = self.role_con,
fashion_type = FuncOpenModel.TypeId.Clothes,
size = Vector2(720,720),
can_rotate = true,
-- raycast_size = Vector2(390, 508),
load_dance_pose = true,
scale = 220,
action_name_list = {dance_pose},
position = Vector3(0,0,-500),
ui_model_type = UIModelCommon.ModelType.Model,
}
FuncOpenModel:getInstance():SetModelRes(res_data)
self.loaded_role_model = lua_resM:GetPartModel(self, self.role_con)
else
self.loaded_role_model:PlayActions({dance_pose})
end
end
-- 更新节点花费信息和描述信息
function DancePoseView:UpdatePoseCostInfoAndDesc(item_data)
self.item_data = item_data
if item_data then
if item_data.activated then -- 已经激活了
self.activated_obj:SetActive(true)
self.activate_con_obj:SetActive(false)
else
self.activated_obj:SetActive(false)
self.activate_con_obj:SetActive(true)
local cost_cfg = item_data.goods_data
local typeId, lock = self.goods_model:GetMappingTypeId(cost_cfg[1], cost_cfg[2])
self.award_item:SetData(typeId, cost_cfg[3], nil, nil, lock)
self.item_name_tmp.text = self.goods_model:getGoodsName(typeId, true)
local goods_num = self.goods_model:GetTypeGoodsNum(typeId)
self.item_neednum_tmp.text = string.format("<color=%s>%s</color>/%s",
goods_num >= cost_cfg[3] and ColorUtil.GREEN_DARK or ColorUtil.RED_DARK,
goods_num, cost_cfg[3])
-- 获取红点
local bool = self.model:GetDanceRedByDanceId(item_data.id)
self.activate_btn_red_obj:SetActive(bool)
end
-- 姿势描述
self.pose_desc_tmp.text = Trim(item_data.desc)
end
end
function DancePoseView:DestroySuccess( )
if self.award_item then
UIObjPool:getInstance():PushItem(UIObjPool.UIType.AwardItem, self.award_item)
end
self.award_item = nil
end