ChildMainViewNew = ChildMainViewNew or BaseClass(BaseView) local ChildMainViewNew = ChildMainViewNew --[[ ChildMainViewNew.TabData = { [1] = {name = "人物", level = MainRoleModel.TabOpenLevel[1]}, } --]] function ChildMainViewNew:__init() self.base_file = "child" self.layout_file = "ChildMainViewNew" self.layer_name = "UI" self.destroy_imm = true self.use_background = true --全屏界面默认使用这个参数 self.hide_maincancas = true --全屏界面需要放开隐藏主UI self.change_scene_close = true self.append_to_ctl_queue = false --是否要添加进界面堆栈 self.need_show_money = false --是否要显示顶部的金钱栏 self.fire_change_visible_event = false self.model = ChildModel:getInstance() self.show_figure_id = -1 self.close_fog = true self.load_callback = function () self:LoadSuccess() self:AddEvent() end self.open_callback = function ( ) self:OpenSuccess() end self.switch_callback = function(index) self:SwitchTab(index) end self.destroy_callback = function ( ) self:DestroySuccess() end end function ChildMainViewNew:Open( view_id, param) self.view_id = view_id self.param = param BaseView.Open(self) end function ChildMainViewNew:LoadSuccess() local nodes = { "trainBtn:obj", "handBookBtn:obj", "dressBtn:obj","vehicleBtn:obj", "skillBtn:obj", "bg:raw", "tabWinCon", --------------------------- "showBaby_con/tips_bg/showCSBtn:obj", "showBaby_con/tips_bg/showWorldBtn:obj", "showBaby_con/tips_bg/showGuildBtn:obj", "showBaby_con:obj", "modelCon", "trainBtn/trainBtnRed:obj", --"showBabyBtn/showBabyBtnRed:obj", "dressBtn/dressBtnRed:obj", "handBookBtn/handBookBtnRed:obj", "skillBtn/skillBtnRed:obj", "vehicleBtn/vehicleBtnRed:obj", --晒娃 "con_show_baby:obj", "con_show_baby/showBabyBtn/showBabyBtnRed:obj", "con_show_baby/showBabyBtn:obj", "con_show_baby/icon_can_get:obj", "con_show_baby/icon_has_get:obj", "con_show_baby/btn_baby_nice_record:obj", "con_show_baby/btn_show_baby_rank:obj", "con_show_baby/con_award", "con_show_baby/lb_reward_count:tmp", "con_show_baby/show_baby_bg:img", "con_show_baby/btn_show_baby_rank/red_btn_show_baby_rank:obj", } self:GetChildren(nodes) self:UpdateBaseView( ) end function ChildMainViewNew:UpdateBaseView( ) lua_resM:setOutsideRawImage(self, self.bg_raw, GameResPath.GetJpgImage("baby_main_1280_720"), false) lua_resM:setOutsideImageSprite(self, self.show_baby_bg_img, GameResPath.GetChildIcon("child_show_baby_bg"), false) local function bg_back_func( ... ) if self.background_wnd and self.background_wnd:GetComponent("RawImageExtend") then self:MoveUIToBack(self.background_wnd:GetComponent("RawImageExtend")) end self:MoveUIToBack(self.bg_raw) end if self.background_wnd then bg_back_func() else self.bg_back_func = bg_back_func end -- 针对特殊分辨率下模型位置会偏移的处理 if ScreenWidth / ScreenHeight < 1280 / 720 then local cur_height = (720 * ScreenWidth) / 1280 self.add_height = (ScreenHeight - cur_height) / 4 else self.add_height = 0 end end function ChildMainViewNew:AddEvent() local onBtnClickHandler = function ( target ) if self.trainBtn_obj == target then -- 打开孩子培养 self.model:Fire(ChildConst.OPEN_CHILD_TRAIN_VIEW, true) elseif self.handBookBtn_obj == target then -- 打开玩具收集 self.model:Fire(ChildConst.OPEN_CHILD_HAND_BOOK_VIEW, true) elseif self.dressBtn_obj == target then -- 打开孩子时装/载具 if self.model:CheckDressIsOpen() then self.model:Fire(ChildConst.OPEN_CHILD_DRESS_VIEW, true) else local str = string.format('宝宝时装在宝宝%s阶时开放', math.floor(self.model:GetChildMaxGrowState() / 10) ) Message.show(str) end elseif self.showBabyBtn_obj == target then -- 晒娃 self.model:Fire(ChildConst.OPEN_SHOW_BABY_VIEW, true) elseif target == self.btn_show_baby_rank_obj then -- 宝宝排行 self.model:Fire(ChildConst.OPEN_CHILD_RANK_VIEW, true) elseif target == self.btn_baby_nice_record_obj then -- 点赞记录 self.model:Fire(ChildConst.OPEN_CHILD_NICE_RECORD_VIEW,true) -- self.showBaby_con_obj:SetActive(true) -- elseif target == self.showBaby_con_obj then -- 关闭晒娃 -- self.showBaby_con_obj:SetActive(false) -- elseif target == self.showWorldBtn_obj then -- 世界晒娃 -- self.showBaby_con_obj:SetActive(false) -- if RoleManager.Instance.mainRoleInfo.level >= Config.Moduleid[110].open_lv then -- self.model:Fire(ChildConst.CHILD_REQ_EVENT, 16509,ChatModel.CHANNEL_WORLD) -- else -- Message.show("等级不足"..Config.Moduleid[110].open_lv, "fault") -- end -- elseif target == self.showCSBtn_obj then -- 跨服晒 -- self.showBaby_con_obj:SetActive(false) -- if RoleManager.Instance.mainRoleInfo.level >= Config.ConfigOpenLv.ChatOpenLevel.CROSS then -- self.model:Fire(ChildConst.CHILD_REQ_EVENT, 16509,ChatModel.CHANNEL_CROSS) -- else -- Message.show("等级不足"..Config.ConfigOpenLv.ChatOpenLevel.CROSS, "fault") -- end -- --Message.show("2") -- elseif target == self.showGuildBtn_obj then -- 社团晒 -- self.showBaby_con_obj:SetActive(false) -- if RoleManager.Instance.mainRoleInfo.level >= Config.ConfigOpenLv.ChatOpenLevel.GUILD and ( RoleManager.Instance:GetMainRoleVo().guild_id and RoleManager.Instance:GetMainRoleVo().guild_id ~= 0) then -- self.model:Fire(ChildConst.CHILD_REQ_EVENT, 16509,ChatModel.CHANNEL_GUILD) -- else -- Message.show("社团频道还未开启哦", "fault") -- end elseif self.skillBtn_obj == target then -- 打开孩子技能 if self.model:CheckSkillIsOpen() then self.model:Fire(ChildConst.OPEN_CHILD_SKILL_VIEW, true) else local str = string.format('宝宝技能在宝宝%s阶时开放', self.model:GetConfigChildKvVal("skill_open_stage")) Message.show(str) end elseif self.vehicleBtn_obj == target then self.model:Fire(ChildConst.OPEN_CHILD_VEHICLE_VIEW, true) end end -- 功能跳转 AddClickEvent(self.trainBtn_obj, onBtnClickHandler) AddClickEvent(self.handBookBtn_obj, onBtnClickHandler) AddClickEvent(self.dressBtn_obj, onBtnClickHandler) AddClickEvent(self.showBabyBtn_obj, onBtnClickHandler) AddClickEvent(self.skillBtn_obj, onBtnClickHandler) AddClickEvent(self.vehicleBtn_obj, onBtnClickHandler) -- 晒娃 -- AddClickEvent(self.showBaby_con_obj, onBtnClickHandler) -- AddClickEvent(self.showWorldBtn_obj, onBtnClickHandler) -- AddClickEvent(self.showCSBtn_obj, onBtnClickHandler) -- AddClickEvent(self.showGuildBtn_obj, onBtnClickHandler) AddClickEvent(self.btn_baby_nice_record_obj, onBtnClickHandler) AddClickEvent(self.btn_show_baby_rank_obj, onBtnClickHandler) local function on_ans_update_red_dot( tab_id )--设置红点的状态注意此处的协议是从model那边发过来的 self:UpdateRedDot(tab_id) end self.on_ans_update_red_dot_id = self.model:Bind(ChildConst.Child_RED_DOT_VIEW, on_ans_update_red_dot) local function update_model() self:UpdateRoleModel( ) end self:BindEvent(self.model, ChildConst.UPDATA_CHILD_MAIN_INFO, update_model) self:BindEvent(self.model, ChildConst.UPDATA_CHILD_DRESS_INFO, update_model) local function update_reward_func() self:UpdateShowBaby() end self:BindEvent(self.model, ChildConst.UPDATE_RANK_REWARD_RED, update_reward_func) local function play_show_baby_effect_func() self.param = self.param or {} self.param.need_show_baby_effect = true self:UpdateShowBaby() end self:BindEvent(self.model, ChildConst.PLAY_SHOW_BABY_EFFECT, play_show_baby_effect_func) end function ChildMainViewNew:OpenSuccess() local close_callback = function() self:Close() end self.tab_win = UITabWindow.New(self.transform, nil, nil, close_callback, self.background_wnd, nil, UITabWindow.SizeSmallHallNoTab, false,nil,true) --self.tab_win:SetTitleRes("child_asset","child_title") --标题 --self.tab_win:SetBackgroundRes("child_base_bg") self.tab_win:SetTitleText("宝宝") self.tab_win:ChangeShowFlag("Child") self:UpdateView() if self.view_id then self:OpenSubView(self.view_id) self.view_id = nil end end -- 跳转到子界面 function ChildMainViewNew:OpenSubView( view_id ) if view_id == ChildConst.TabId.ChildTrain then -- 打开孩子培养 self.model:Fire(ChildConst.OPEN_CHILD_TRAIN_VIEW, true) elseif view_id == ChildConst.TabId.ChildHandbook then -- 打开玩具收集 self.model:Fire(ChildConst.OPEN_CHILD_HAND_BOOK_VIEW, true) elseif view_id == ChildConst.TabId.ChildDress then -- 打开孩子时装/载具 if self.model:CheckDressIsOpen() then self.model:Fire(ChildConst.OPEN_CHILD_DRESS_VIEW, true) else local str = string.format('宝宝时装在宝宝%s阶时开放', math.floor(self.model:GetChildMaxGrowState() / 10) ) Message.show(str) end elseif view_id == ChildConst.TabId.ChildSkill then -- 打开孩子技能 if self.model:CheckSkillIsOpen() then self.model:Fire(ChildConst.OPEN_CHILD_SKILL_VIEW, true) else local str = string.format('宝宝技能在宝宝%s阶时开放', self.model:GetConfigChildKvVal("skill_open_stage")) Message.show(str) end elseif view_id == ChildConst.TabId.ChildVehicle then -- 孩子载具 self.model:Fire(ChildConst.OPEN_CHILD_VEHICLE_VIEW, true) end end function ChildMainViewNew:UpdateView() self:UpdateRoleModel() self:UpdateShowBaby() self:UpdateRedDot() end function ChildMainViewNew:UpdateRoleModel( ) local show_figure_id = self.model:GetChildCloth() -- if self.show_figure_id == show_figure_id then -- return -- end self.show_figure_id = show_figure_id local res_data = { father_node = self, transform = self.modelCon, fashion_type = FuncOpenModel.TypeId.Child, figure_id = show_figure_id, ui_model_type = UIModelCommon.ModelType.BackModel, can_rotate = false, } FuncOpenModel:getInstance():SetModelRes(res_data) local PARAM = ChildConst.MainViewModelAnimParams SetLocalPosition(self.modelCon, PARAM.START_POS_X, PARAM.START_POS_Y + self.add_height, 0) cc.ActionManager:getInstance():removeAllActionsFromTarget(self.modelCon) GlobalTimerQuest:CancelQuest(self.delay_id) if self.model:GetChildCurState( ) ~= ChildConst.BABY_STATE.BABY then -- 非襁褓期才播动画 local function delay_method( ) self:UpdateAnimation( ) end self.delay_id = GlobalTimerQuest:AddPeriodQuest(delay_method, 4, 1) end end function ChildMainViewNew:UpdateAnimation( ) local child_model = lua_resM:GetPartModel(self, self.modelCon) if child_model then local PARAM = ChildConst.MainViewModelAnimParams ------------------------------------------------ -- 停一停 循环开始 local action1 = cc.DelayTime.New( PARAM.WAIT_TIME_LEFT ) -- 切换为奔跑动作 local function callback_1() child_model:ClearActionTimerList() child_model:PlayActions({"run"}) end local call_func_1 = cc.CallFunc.New(callback_1) -- 转向 180 -> 90 local function rotate_right(percent) child_model.transform.localRotation = Quaternion.Euler(Vector3(0, 180 - (90 * percent),0)) end local action2 = cc.CustomUpdate.New(PARAM.ROTATE_TIME, rotate_right) -- 移动 local function move_right(percent) SetAnchoredPositionX(self.modelCon, PARAM.START_POS_X + PARAM.MOVE_DIST * percent) end local action3 = cc.CustomUpdate.New(PARAM.MOVE_TIME, move_right) -- 转向 90 -> 180 local function rotate_front(percent) child_model.transform.localRotation = Quaternion.Euler(Vector3(0, 90 + (90 * percent),0)) end local action4 = cc.CustomUpdate.New(PARAM.ROTATE_TIME, rotate_front) -- 切换为show2动作 local function callback_2() child_model:ClearActionTimerList() child_model:PlayActions({"show2", "show"}) end local call_func_2 = cc.CallFunc.New(callback_2) -- 停一停 local action5 = cc.DelayTime.New( PARAM.WAIT_TIME_RIGHT ) -- 向左看 并 切换为奔跑动作 local function callback_3() child_model:ClearActionTimerList() child_model:PlayActions({"run"}) end local call_func_3 = cc.CallFunc.New(callback_3) -- 转向 180 -> 270 local function rotate_left(percent) child_model.transform.localRotation = Quaternion.Euler(Vector3(0, 180 + (90 * percent),0)) end local action6 = cc.CustomUpdate.New(PARAM.ROTATE_TIME, rotate_left) -- 移动 local function move_left(percent) SetAnchoredPositionX(self.modelCon, PARAM.START_POS_X + PARAM.MOVE_DIST * (1-percent)) end local action7 = cc.CustomUpdate.New(PARAM.MOVE_TIME, move_left) -- 转向 180 -> 270 local function rotate_front2(percent) child_model.transform.localRotation = Quaternion.Euler(Vector3(0, 270 - (90 * percent),0)) end local action8 = cc.CustomUpdate.New(PARAM.ROTATE_TIME, rotate_front2) -- 切换为show2动作(复用上面的方法) -- 循环结束 ------------------------------------------------ local action9 = cc.Sequence.New( action1, call_func_1, action2, action3, action4, call_func_2, action5,call_func_3, action6, action7, action8, call_func_2)--顺序 local action10 = cc.RepeatForever.New( action9 ) cc.ActionManager:getInstance():addAction(action10, self.modelCon) end end function ChildMainViewNew:UpdateRedDot(id) if id == ChildConst.TabId.ChildTrain then -- 宝宝培养 self:UpdateTrainRed() elseif id == ChildConst.TabId.ChildVehicle then -- 坐骑 self:UpdateVehicleRed() elseif id == ChildConst.TabId.ChildDress then -- 时装 self:UpdateDressRed() elseif id == ChildConst.TabId.ChildSkill then -- 技能 self:UpdateSkillRed() elseif id == ChildConst.TabId.ChildHandbook then -- 玩具 self:UpdateHandbookRed() else self:UpdateTrainRed() self:UpdateDressRed() self:UpdateSkillRed() self:UpdateHandbookRed() self:UpdateVehicleRed() end end function ChildMainViewNew:UpdateTrainRed( ) local bool = self.model:GetChildRedDotList()[ChildConst.TabId.ChildTrain] self.trainBtnRed_obj:SetActive(bool) end function ChildMainViewNew:UpdateDressRed( ) local bool = self.model:GetChildRedDotList()[ChildConst.TabId.ChildDress] self.dressBtnRed_obj:SetActive( self.model:CheckDressIsOpen( ) and bool ) end function ChildMainViewNew:UpdateVehicleRed( ) local bool = self.model:GetChildRedDotList()[ChildConst.TabId.ChildVehicle] self.vehicleBtnRed_obj:SetActive( bool ) end function ChildMainViewNew:UpdateSkillRed( ) local bool = self.model:GetChildRedDotList()[ChildConst.TabId.ChildSkill] self.skillBtnRed_obj:SetActive(bool) end function ChildMainViewNew:UpdateHandbookRed( ) local bool = self.model:GetChildRedDotList()[ChildConst.TabId.ChildHandbook] self.handBookBtnRed_obj:SetActive(bool) end function ChildMainViewNew:SwitchTab( index ) end function ChildMainViewNew:HideChangeCall( bool ) if bool then self:UpdateRoleModel() end end ----------晒娃相关-start--------- function ChildMainViewNew:UpdateShowBaby( ) local childList = self.model:GetChildInfo() local get_count = childList.share_reward == 2 and 0 or 1 local color = get_count > 0 and ColorUtil.GREEN_DARK or ColorUtil.RED_DARK self.lb_reward_count_tmp.text = string.format('今日领奖次数:%s/1', HtmlColorTxt( get_count, color)) -- 奖励item self.award_item = self.award_item or UIObjPool:getInstance():PopItem(UIObjPool.UIType.AwardItem, self.con_award) self.award_item:SetItemSize(78, 78) local reward = stringtotable(self.model:GetConfigChildKvVal("show_gift"))[1] self.award_item:SetVisible(reward and true or false) if reward then local typeId, lock = GoodsModel:getInstance():GetMappingTypeId(reward[1], reward[2]) self.award_item:SetData(typeId, reward[3], nil, nil, lock) end self.icon_can_get_obj:SetActive(childList.share_reward == 1) self.icon_has_get_obj:SetActive(childList.share_reward == 2) self.award_item:SetGray(childList.share_reward == 2) if childList.share_reward == 1 then self.award_item:SetCallBack(function () self.model:Fire(ChildConst.CHILD_REQ_EVENT, 16540, 1) end) else self.award_item:SetCallBack( nil ) end self.showBabyBtnRed_obj:SetActive(childList.share_reward == 0) if self.param and self.param.need_show_baby_effect then self:ClearUIEffect(self.showBabyBtn) self:AddUIEffect("ui_jujiaodianji", self.showBabyBtn, self.layer_name, nil, 1, false, 3) self.param.need_show_baby_effect = nil end self.red_btn_show_baby_rank_obj:SetActive(self.model:GetShowBabyRankReward()) end ----------晒娃相关-end----------- function ChildMainViewNew:DestroySuccess( ) if self.tab_win then self.tab_win:DeleteMe() self.tab_win = nil end if self.on_ans_update_red_dot_id then self.model:UnBind(self.on_ans_update_red_dot_id) self.on_ans_update_red_dot_id = nil end if self.delay_id then GlobalTimerQuest:CancelQuest(self.delay_id) end cc.ActionManager:getInstance():removeAllActionsFromTarget(self.modelCon) if self.award_item then UIObjPool:getInstance():PushItem(UIObjPool.UIType.AwardItem, self.award_item) end self.award_item = nil self:ClearUIEffect(self.showBabyBtn) end