源战役客户端
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.
 
 
 
 
 

145 lines
4.8 KiB

-- <*
-- @Author: Saber
-- @Description: 主界面舞姿选择界面
-- *>
DanceMainUISelectPoseView = DanceMainUISelectPoseView or BaseClass(BaseView)
local DanceMainUISelectPoseView = DanceMainUISelectPoseView
local table_insert = table.insert
function DanceMainUISelectPoseView:__init()
self.base_file = "dance"
self.layout_file = "DanceMainUISelectPoseView"
self.layer_name = "Activity"
self.destroy_imm = true
self.use_background = true --全屏界面默认使用这个参数,非全屏界面自行设置
self.background_alpha = 0 -- 特殊处理,全透明的背景蒙版
self.click_bg_toClose = true
self.model = DanceModel:getInstance()
self.random_dance_flag = self.model:GetIsRandomPose()
self.main_role = RoleManager.Instance.mainRoleInfo
self.load_callback = function ()
self:LoadSuccess()
self:AddEvent()
end
self.open_callback = function ( )
self:UpdateView()
end
self.destroy_callback = function ( )
self:DestroySuccess()
end
end
function DanceMainUISelectPoseView:Open(pos)
self.pos = pos or Vector3(0, 0, 0)
BaseView.Open(self)
end
function DanceMainUISelectPoseView:LoadSuccess()
local nodes = {
"bg",
"pose_scroll",
"pose_scroll/Viewport/pose_con",
"random_tog:obj:tog",
}
self:GetChildren(nodes)
SetAnchoredPosition(self.transform, self.pos.x + 137, self.pos.y + 125)
self.random_tog_tog.isOn = self.random_dance_flag
end
function DanceMainUISelectPoseView:AddEvent()
local function click_event(target)
if target == self.random_tog_obj then
self.random_dance_flag = self.random_tog_tog.isOn
end
end
AddClickEvent(self.random_tog_obj, click_event)
local function on_dance_pose_change()
self:UpdateDanceSelected()
end
self.on_dance_pose_change_id = self.main_role:BindOne("dance_status", on_dance_pose_change)
local function update_dance_data()
self:UpdateView()
end
self:BindEvent(self.model, DanceModel.UPDATE_DANCE_POSES_DATA, update_dance_data)
end
-- 根据规则初始化节点高度
function DanceMainUISelectPoseView:InitScrollRectHeight(item_num)
-- 舞姿节点少于4个时,只显示一行内容,其他情况显示两行内容
if item_num <= 4 then
SetSizeDeltaY(self.bg, 120)
SetSizeDeltaY(self.pose_scroll, 84)
else
SetSizeDeltaY(self.bg, 206)
SetSizeDeltaY(self.pose_scroll, 170)
end
end
function DanceMainUISelectPoseView:UpdateView()
-- 由于需要插入第一个特殊节点,还需要剔除未激活的舞姿,所以这边需要重新提取出数据
local data = self.model:GetDancePoseDataList()
local activated_dance_data = {}
-- 插入特殊节点
local special_first_data = {
is_special_data = true
}
table_insert(activated_dance_data, special_first_data)
-- 提取出已激活的舞姿
for k, v in pairs(data) do
if v.activated then
table_insert(activated_dance_data, v)
end
end
self:InitScrollRectHeight(#activated_dance_data)
self.pose_item_creator = self.pose_item_creator or self:AddUIComponent(UI.ItemListCreator)
local cur_dance_id = self.main_role.dance_status
local info = {
data_list = activated_dance_data,
scroll_view = self.pose_scroll,
item_con = self.pose_con,
item_class = DanceMainUISelectPoseItem,
item_height = 78,
item_width = 78,
start_x = 2,
start_y = -3.5,
space_x = 8,
space_y = 8,
create_frequency = 0.01,
is_scroll_back_on_update = true,
alignment = UnityEngine.TextAnchor.UpperLeft,
on_update_item = function(item, i, v)
item:SetData(v)
item:SetSelected(cur_dance_id)
end,
}
self.pose_item_creator:UpdateItems(info)
end
function DanceMainUISelectPoseView:UpdateDanceSelected()
local dance_id = self.main_role.dance_status
-- print("Saber:DanceMainUISelectPoseView [114] dance_id: ",dance_id)
if self.pose_item_creator then
self.pose_item_creator:IterateItems(function(item, i)
item:SetSelected(dance_id)
end)
end
-- 切换舞姿后,在更新完选中框之后关闭舞姿界面
if self.model._need_pose_select_view_close then
self:Close()
end
end
function DanceMainUISelectPoseView:DestroySuccess( )
-- 关闭界面时,切换随机舞姿状态
self.model:Fire(DanceModel.REQUEST_CCMD_EVENT, 42503, self.random_dance_flag and 1 or 0)
if self.on_dance_pose_change_id then
self.main_role:UnBind(self.on_dance_pose_change_id)
self.on_dance_pose_change_id = nil
end
-- 重置自动关闭舞姿界面的标志量
self.model._need_pose_select_view_close = false
end