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