|
|
- 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
|