|
|
- --[[
- <*
- @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
|