源战役客户端
您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符
 
 
 
 
 

178 行
6.3 KiB

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