-- <* -- @Author: Saber -- @Description: 藏宝图 答题界面 -- *> TreasureMapQuizView = TreasureMapQuizView or BaseClass(BaseView) local TreasureMapQuizView = TreasureMapQuizView function TreasureMapQuizView:__init() self.base_file = "treasureMap" self.layout_file = "TreasureMapQuizView" self.layer_name = "UI" self.destroy_imm = true self.use_background = true --全屏界面默认使用这个参数,非全屏界面自行设置 self.hide_maincancas = false --全屏界面需要隐藏主UI self.change_scene_close = true --是否切换场景时关闭(弹出界面使用) self.model = TreasureMapModel:getInstance() self.ans_seq = { [1] = "A", [2] = "B", [3] = "C", [4] = "D", } self.ans_item = {} self.auto_close_time = 30 -- 几秒后自动关闭 self.selected_index = false -- 是否已经选择了选项 self.load_callback = function () self:LoadSuccess() self:AddEvent() end self.open_callback = function ( ) self:UpdateView() end self.destroy_callback = function ( ) self:DestroySuccess() end end function TreasureMapQuizView:Open(data) self.data = data BaseView.Open(self) end function TreasureMapQuizView:LoadSuccess() local nodes = { "bg:raw", "quiz_role:raw", "close_btn:obj", "ans_con", "reward_con", "ques_lb:tmp", "sub_title:tmp", "auto_close:tmp", } self:GetChildren(nodes) lua_resM:setOutsideRawImage(self, self.bg_raw, GameResPath.GetViewBigBg("tm_quiz_bg")) lua_resM:setOutsideRawImage(self, self.quiz_role_raw, GameResPath.GetRoleBg("tm_quiz_role_431_618")) self.sub_title_tmp.text = string.format("没想到居然有人能找到这来,你运气不错嘛!\n来吧,出道题考考你!") self.awardItem = UIObjPool:getInstance():PopItem(UIObjPool.UIType.AwardItem, self.reward_con) self.awardItem:SetItemSize(78, 78) self.awardItem:SetAnchoredPosition(0, 0) end function TreasureMapQuizView:AddEvent() local function click_event(target) if target == self.close_btn_obj then self:Close() end end AddClickEvent(self.close_btn_obj, click_event) local function updateViewAfterSelectedAns() self:UpdateSelectedResult() end self:BindEvent(self.model, TreasureMapConst.UPDATE_QUIZ_VIEW, updateViewAfterSelectedAns) end function TreasureMapQuizView:UpdateView() self.quiz_cfg = Config.Treasuremapquiz[self.data.quiz_id] self.reward_cfg = Config.Treasuremaprewards[self.data.reward_id] self:UpdateBasicData() self:AutoCloseTimer() end -- 加载谜题等基础数据 function TreasureMapQuizView:UpdateBasicData( ) if self.quiz_cfg then -- 加载谜题和选项 self.ques_lb_tmp.text = Trim(self.quiz_cfg.question) local ans_data = stringtotable(self.quiz_cfg.option) self.ans_data = RandomizeSequenceTableData(ans_data) self.ans_item_creator = self.ans_item_creator or self:AddUIComponent(UI.ItemListCreator) local info = { data_list = self.ans_data, item_con = self.ans_con, scroll_view = self.ans_con, prefab_ab_name = "treasureMap", prefab_res_name = "TreasureMapQuizAnsItem", item_width = 158, item_height = 42, start_y = -5, space_x = 30, space_y = 20, create_frequency = 0.01, alignment = UnityEngine.TextAnchor.UpperLeft, child_names = { "ans_btn:obj", "ans_btn/ans_lb:tmp", }, on_update_item = function(item, i, v) item.ans_lb_tmp.text = string.format("%s.%s", self.ans_seq[i], Trim(v[2])) local function click_event(target) if target == item.ans_btn_obj then if self.selected_index then return end -- 选中了答案之后就不处理 self.model:Fire(TreasureMapConst.REQUEST_CCMD_EVENT, 42408, self.data.quiz_id, v[1]) self.selected_index = i end end AddClickEvent(item.ans_btn_obj, click_event) end, } self.ans_item_creator:UpdateItems(info) end -- 加载奖励节点 if self.reward_cfg then local reward = stringtotable(self.reward_cfg.rewards)[1] or {} local goods_Id, lock = GoodsModel:getInstance():GetMappingTypeId(reward[1] , reward[2]) self.awardItem:SetData(goods_Id, reward[3], nil, nil, lock) end end function TreasureMapQuizView:AutoCloseTimer( ) local end_time = TimeUtil:getServerTime() + self.auto_close_time local function auto_close_time_func() local left_time = end_time - TimeUtil:getServerTime() if left_time > 0 then self.auto_close_tmp.text = self.selected_index and string.format("%s 秒后自动关闭", ColorUtil.GREEN_DARK, left_time) or string.format("(回答正确可得双倍奖励,%s 秒后自动选择)", ColorUtil.GREEN_DARK, left_time) else if not self.selected_index then self.model:Fire(TreasureMapConst.REQUEST_CCMD_EVENT, 42408, self.data.quiz_id, 1) else self:Close() end end end self:ClearAutoCloseTimer() self.auto_close_time_func_id = GlobalTimerQuest:AddPeriodQuest(auto_close_time_func, 0.5, -1) end function TreasureMapQuizView:ClearAutoCloseTimer( ) if self.auto_close_time_func_id then GlobalTimerQuest:CancelQuest(self.auto_close_time_func_id) self.auto_close_time_func_id = nil end end -- 根据08协议的返回更新界面表现 function TreasureMapQuizView:UpdateSelectedResult( ) if self.quiz_cfg then -- 加载谜题和选项 self.ans_item_creator:IterateItems(function( item, i ) if i == self.selected_index then local ans_data = self.ans_data[i] local ans_currect = ans_data[1] == self.quiz_cfg.answer item.ans_lb_tmp.text = string.format("%s.%s", ans_currect and ColorUtil.GREEN_DARK or ColorUtil.RED_DARK, self.ans_seq[i], Trim(ans_data[2])) -- 飘字表现 Message.show(ans_currect and "回答正确,获得双倍奖励~" or "回答错误", ans_currect and "success" or "fault") end end) -- 重置自动关闭时间 self.auto_close_time = 5 self:AutoCloseTimer() end end function TreasureMapQuizView:DestroySuccess( ) if self.awardItem then UIObjPool:getInstance():PushItem(UIObjPool.UIType.AwardItem, self.awardItem) self.awardItem = nil end self:ClearAutoCloseTimer() -- 没选的话自动选中第一个 if not self.selected_index then self.model:Fire(TreasureMapConst.REQUEST_CCMD_EVENT, 42408, self.data.quiz_id, 1) end self.model._check_tm_tips = TreasureMapConst.Normal self.model:CheckTreasureTipUseViewOpen() end