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
|