--[[ <* @Author: Saber @Description: 社团活跃度界面 *> ]] GuildActiveView = GuildActiveView or BaseClass(BaseItem) local GuildActiveView = GuildActiveView function GuildActiveView:__init(parent_wnd,prefab_asset,layer_name) self.base_file = "guild" self.layout_file = "GuildActiveView" self.parent_wnd = parent_wnd self.layer_name = layer_name self.left_item_con = {} -- 左侧的社团活跃item表 -- self.light_item_con = {} -- 左侧的社团活跃节点光图片列表 self.right_item_con = {} -- 中间玩家当日活跃度item表 self.model = GuildModel:getInstance() -- 活跃数据 self.model:Fire(GuildModel.REQUEST_CCMD_EVENT, 40400) self.model:Fire(GuildModel.REQUEST_CCMD_EVENT, 40402) self.week_act_data = self.model:GetActiveRewardCfg() -- 社团每周活跃奖励配置 self.fillamount_stage_pec = { [0] = 0.04, [1] = 0.155, [2] = 0.325, [3] = 0.5, [4] = 0.676, [5] = 0.85, } self:Load() end function GuildActiveView:Load_callback() self.nodes = { -- 左侧 "left/left_fillbar:img", "left/act_week_val:txt", "left/act_val:txt", "left/act_tips:tmp", "left/ques_btn:obj", -- 右侧 "right/act_task_scroll", "right/act_task_scroll/Viewport/act_task_con", } self:GetChildren(self.nodes) local function image_callback() self.left_fillbar_img.type = UnityEngine.UI.Image.Type.Filled end lua_resM:setOutsideImageSprite(self, self.left_fillbar_img, GameResPath.GetGuildImage("guild_active_circle_fill"), false, image_callback) for i = 1, 5 do self.left_item_con[i] = {} self.left_item_con[i].node = self:GetChild("left/left_item_con" .. i) -- self.light_item_con[i] = self:GetChild("left/l_point" .. i).gameObject self.left_item_con[i].value = self:GetChild("left/left_item_val" .. i):GetComponent(typeof(TMPro.TextMeshProUGUI)) end self:AddEvents() self:UpdateView() end function GuildActiveView:AddEvents( ) local function click_event(target) if target == self.ques_btn_obj then GlobalEventSystem:Fire(EventName.OPEN_INSTRUCTION_VIEW, 40005) end end AddClickEvent(self.ques_btn_obj, click_event) -- 更新社团周活跃数据 local function update_guild_act_data() self:UpdateLeftConInfo() self:UpdateLeftActItem() end self:BindEvent(self.model, GuildModel.UPDATE_GUILD_ACTIVE_DATA, update_guild_act_data) -- 更新玩家日常数据 local function update_role_act_data() self:UpdatePersonalActiveData() end self:BindEvent(self.model, GuildModel.UPDATE_ROLE_ACTIVE_DATA, update_role_act_data) -- 更新活跃任务表 local function update_task_data() self:UpdateGuildActTask() end self:BindEvent(self.model, GuildModel.UPDATE_GUILD_TASK_PROGRESS, update_task_data) -- 更新奖励领取结果 local function update_reward_stage(opty) if opty == 1 then self:UpdateLeftActItem() end end self:BindEvent(self.model, GuildModel.UPDATE_GUILD_ACTIVE_REWARD, update_reward_stage) end function GuildActiveView:UpdateView( ) self.act_tips_tmp.text = string.format("(达到%s才可领取奖励)", self.model:GetGuildKvByKey("min_active_require").val) self:UpdateLeftConInfo() self:UpdateLeftActItem() self:UpdatePersonalActiveData() self:UpdateGuildActTask() end -- 更新左侧数据 function GuildActiveView:UpdateLeftConInfo( ) -- 社团本周活跃度 local guild_active, guild_active_stage, guild_week_stime = self.model:GetGuildActiveData() self.act_week_val_txt.text = guild_active -- 计算滚动条的长度 local cur_stage = 0 local max_stage = #self.week_act_data for i = 1, max_stage do if self.week_act_data[i].need <= guild_active then cur_stage = i else break end end cur_need = self.week_act_data[cur_stage+1 < max_stage and cur_stage+1 or cur_stage].need local fillAmount = 0 if cur_stage < max_stage then -- 未满的情况 local cur_need = self.week_act_data[cur_stage] and self.week_act_data[cur_stage].need or 0 local next_need = self.week_act_data[cur_stage+1].need local cur_stage_start_pec = self.fillamount_stage_pec[cur_stage] local next_stage_start_pec = self.fillamount_stage_pec[cur_stage + 1] fillAmount = cur_stage_start_pec + (next_stage_start_pec - cur_stage_start_pec) * (guild_active-cur_need) / (next_need - cur_need) -- fillAmount = (guild_active - cur_need) / (next_need - cur_need) / max_stage + cur_stage / max_stage else fillAmount = 1 end self.left_fillbar_img.fillAmount = fillAmount end -- 更新左侧活跃奖励item function GuildActiveView:UpdateLeftActItem( ) -- 获取社团当前周的活跃信息 for k, v in ipairs(self.left_item_con) do if not v.item then v.item = GuildActiveActItem.New(v.node) end v.item:SetData(self.week_act_data[k]) v.value.text = self.week_act_data[k] and self.week_act_data[k].need or 0 end end -- 更新个人活跃数据 function GuildActiveView:UpdatePersonalActiveData( ) -- 今日活跃值 local personal_active = self.model:GetPersonalActiveInfo() self.act_val_txt.text = personal_active end -- 更新社团活跃度任务 function GuildActiveView:UpdateGuildActTask( ) local task_list = self.model:GetGuildActiveTaskCfg() self.task_item_creator = self.task_item_creator or self:AddUIComponent(UI.ItemListCreator) local info = { data_list = task_list, item_con = self.act_task_con, scroll_view = self.act_task_scroll, item_class = GuildActiveTaskItem, item_height = 102, start_x = 4, start_y = -5, space_y = 5, create_frequency = 0.01, alignment = UnityEngine.TextAnchor.UpperLeft, on_update_item = function(item, i, v) item:SetData(v) end, } self.task_item_creator:UpdateItems(info) end function GuildActiveView:__delete( ) for k, v in ipairs(self.left_item_con) do if v.item then v.item:DeleteMe() v.item = nil end end self.left_item_con = {} end