源战役客户端
選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。
 
 
 
 
 

168 行
5.8 KiB

DanceModel = DanceModel or BaseClass(BaseVo, true)
local DanceModel = DanceModel
DanceModel.REQUEST_CCMD_EVENT = "DanceModel.REQUEST_CCMD_EVENT"
DanceModel.UPDATE_DANCE_POSES_DATA = "DanceModel.UPDATE_DANCE_POSES_DATA" -- 更新舞姿总览数据
DanceModel.ACTIVATED_DANCE_POSE = "DanceModel.ACTIVATED_DANCE_POSE" -- 更新舞姿时推送
DanceModel.UPDATE_DEFAULT_DANCE_POSE = "DanceModel.UPDATE_DEFAULT_DANCE_POSE" -- 更新默认舞姿时推送
DanceModel.UPDATE_RANDOM_DANCE_FLAG = "DanceModel.UPDATE_RANDOM_DANCE_FLAG" -- 更新随机舞姿标志
DanceModel.UPDATE_DANCE_RED = "DanceModel.UPDATE_DANCE_RED" -- 更新舞姿红点
-- 公共接口
DanceModel.CHANGE_DANCE_STATUS = "DanceModel.CHANGE_DANCE_STATUS" -- 切换跳舞状态
DanceModel.OPEN_DANCE_POSE_SELECT_VIEW = "DanceModel.OPEN_DANCE_POSE_SELECT_VIEW" -- 打开舞姿选择界面
DanceModel.OPEN_DANCE_POSE_VIEW = "DanceModel.OPEN_DANCE_POSE_VIEW" -- 打开舞姿界面
function DanceModel:__init()
DanceModel.Instance = self
self:Reset()
end
function DanceModel:Reset()
self.is_rand_dance = false -- 是否是随机舞姿
self.cur_dance_pose_id = 1 -- 当前默认舞姿id
self.dance_poses_activated_list = {} -- 已激活的舞姿id列表 格式为[dance_id] = true
self.dance_pose_data = nil -- 舞姿数据列表
self.dance_red = false -- 舞姿红点
self.dance_red_item_cache = {} -- 舞姿红点缓存 格式为 舞姿id = true/false
self._need_pose_select_view_close = false -- 切换舞姿后,是否需要自动关闭舞姿切换界面
end
function DanceModel:getInstance()
if self.Instance == nil then
self.Instance = DanceModel.New()
end
return self.Instance
end
-- 协议数据相关 start
-- 舞姿总览 42500
function DanceModel:SetDancePosesData(vo)
self:UpdateRandomDanceFlag(vo.is_rand)
self:UpdateDefaultDancePose(vo.dance_id)
self.dance_poses_activated_list = {}
for k, v in pairs(vo.dance) do
self.dance_poses_activated_list[v.id] = true
end
end
-- 获取是否是随机舞姿
function DanceModel:GetIsRandomPose( )
return self.is_rand_dance == 1
end
-- 获取默认的舞姿id
function DanceModel:GetDefaultDancesPoseId( )
return self.cur_dance_pose_id
end
function DanceModel:GetDancePosesActivatedList(dance_id)
if dance_id then
return self.dance_poses_activated_list[dance_id] or false
else
return self.dance_poses_activated_list
end
end
-- 舞姿激活 42501
function DanceModel:UpdateDancePoseList(dance_id)
if self.dance_poses_activated_list then
self.dance_poses_activated_list[dance_id] = true
end
end
-- 设置默认舞姿 42502
function DanceModel:UpdateDefaultDancePose(dance_id)
if dance_id then
self.cur_dance_pose_id = dance_id
end
end
-- 设置是否随机舞姿 42503
function DanceModel:UpdateRandomDanceFlag(type)
self.is_rand_dance = type
end
-- 协议数据相关 end
-- 配置相关 start
-- 获取配置的舞姿数据列表
function DanceModel:GetDancePoseDataList( )
if not self.dance_pose_data then -- 没有数据时,就引用配置顺序存储
self.dance_pose_data = {}
for k, v in pairs(Config.Dance) do
v.goods_data = stringtotable(v.goods)[1]
self.dance_pose_data[#self.dance_pose_data + 1] = v
end
end
-- 更新协议数据到舞姿数据列表中
self:SortDancePoseData()
return self.dance_pose_data
end
-- 根据激活情况排序舞姿数据
function DanceModel:SortDancePoseData( )
-- 每次获取数据都要重新判断一次激活情况
if self.dance_pose_data then
for k, v in ipairs(self.dance_pose_data) do
v.activated = self:GetDancePosesActivatedList(v.id)
end
end
-- 已激活的在前,可激活在中间,不可激活在后,相同状态按排序id从低往高排序
local a_red, b_red
local sort_func = function ( a, b )
if a.activated == b.activated then
a_red = self:GetDanceRedByDanceId(a.id)
b_red = self:GetDanceRedByDanceId(b.id)
if a_red == b_red then
return a.order < b.order
else
return a_red
end
else
return a.activated
end
end
table.sort(self.dance_pose_data, sort_func)
end
-- 配置相关 end
-- 红点相关 start
-- 检测舞姿id dance_id 如果传了舞姿id,则只检测这个舞姿的红点情况
function DanceModel:CheckDanceRedByGoodsModel( )
self:CheckDanceRed()
end
function DanceModel:CheckDanceRed(dance_id)
self.dance_red = false
local goods_model = GoodsModel:getInstance()
-- local goods_model = GoodsModel:getInstance():GetTypeGoodsNum
-- 舞姿的红点主要是检测可激活的舞姿
local dance_data = self:GetDancePoseDataList()
if dance_data then
for k, v in pairs(dance_data) do
if (dance_id and dance_id == v.id) -- 只检测目标舞姿id
or not dance_id then -- 全部检测
if v.activated then -- 已激活,没有红点
self.dance_red_item_cache[v.id] = false
else
local goods_id = tonumber(v.goods_data[2])
local goods_num = goods_model:GetTypeGoodsNum(goods_id)
self.dance_red_item_cache[v.id] = goods_num >= tonumber(v.goods_data[3])
end
end
end
end
for k, v in pairs(self.dance_red_item_cache) do
if v then
self.dance_red = true
break
end
end
-- 推送红点更新
self:Fire(DanceModel.UPDATE_DANCE_RED)
end
function DanceModel:GetDanceRed( )
return self.dance_red
end
-- 获取舞姿对应的红点,也就是可激活的状态
function DanceModel:GetDanceRedByDanceId(dance_id)
return dance_id and self.dance_red_item_cache[dance_id] or false
end
-- 红点相关 end