-- <*
-- @Author: Saber
-- @Description: 社团场景 社团boss roll点节点
-- *>
GuildSceneRollItem = GuildSceneRollItem or BaseClass(BaseItem)
local GuildSceneRollItem = GuildSceneRollItem
local TimeUtil = TimeUtil
local SetAnchoredPositionX = SetAnchoredPositionX
local SetAnchoredPositionY = SetAnchoredPositionY
function GuildSceneRollItem:__init(parent_wnd,prefab_asset,layer_name)
self.base_file = "guildScene"
self.layout_file = "GuildSceneRollItem"
self.parent_wnd = parent_wnd
self.layer_name = layer_name
self.model = GuildModel:getInstance()
self.goods_model = GoodsModel:getInstance()
self.selected_index = -1
self.index = 0
self.anim_index = 0
self.data = nil
self.click_callback = nil
self.target_pos_y = 0 -- 用于做动画的y轴偏移
self.roll_delay_time = self.model:GetGuildBossKV("roll_time") -- 几秒后结束roll点
self.x_pos_anim_time = 0.5
self.y_pos_anim_time = 0.5
self.fade_animating = false -- 是否在自己的隐藏动画中
self:Load()
end
function GuildSceneRollItem:Load_callback()
local nodes = {
"selected:img",
"progress:img",
"item_con",
"highest_flag:img",
"status_flag:tmp",
"click_bg:obj",
}
self:GetChildren(nodes)
self.award_item = UIObjPool:getInstance():PopItem(UIObjPool.UIType.AwardItem, self.item_con)
self.award_item:SetAnchoredPosition(0, 0)
self.award_item:SetItemSize(62, 62)
self.award_item:SetVisible(false)
self:AddEvents()
if self.need_refreshData then
self:UpdateView()
end
end
function GuildSceneRollItem:AddEvents( )
local function click_event(target)
if target == self.click_bg_obj then
if self.click_callback and self.data then
self.click_callback(self.index, self.data)
end
if self.data and self.data.roll_num == 0 then -- 没参与roll点,而且本轮roll点未结束,则点击发送协议参与
local is_finished = self.model:GetGuildBossRollIsFinished()
if not is_finished then
self.model:Fire(GuildModel.REQUEST_CCMD_EVENT, 40614, 1, self.data.order_id)
self:ClearRollTimeEffect() -- roll点后倒计时取消
end
end
end
end
AddClickEvent(self.click_bg_obj, click_event)
local function update_roll_data()
self:UpdateRollStatus()
end
self:BindEvent(self.model, GuildModel.UPDATE_BOSS_ROLL_DATA, update_roll_data)
self:BindEvent(self.model, GuildModel.UPDATE_GUILD_BOSS_HIGHEST_DATA, update_roll_data)
end
function GuildSceneRollItem:SetData(index, data, click_callback)
self.index = index
self.anim_index = index -- 动画专用的index
self.data = data
self.click_callback = click_callback
if self.is_loaded then
self.need_refreshData = false
self:UpdateView()
else
self.need_refreshData = true
end
end
function GuildSceneRollItem:UpdateView( )
self:UpdateBaseData()
self:UpdateRollTimeEffect()
self:UpdateRollStatus()
self:SetSelected(self.selected_index)
end
-- 更新基础信息
function GuildSceneRollItem:UpdateBaseData( )
-- 获取道具配置
local goods_id = self.data.goods_type_id
self.award_item:SetDataWithMapId(goods_id, self.data.num)
self.award_item:SetVisible(true)
end
-- 更新roll点倒计时表现 并根据roll点与否隐藏倒计时表现
function GuildSceneRollItem:UpdateRollTimeEffect( )
self.progress_img.enabled = true
local start_time = self.model:GetGuildBossRollStartTime()
local end_time = (start_time + self.roll_delay_time) * 1000
local function roll_timer_func()
local left_time = (end_time - TimeUtil:getServerTimeMs()) * 0.001
if left_time <= 0 then
self.progress_img.fillAmount = 0
self:ClearRollTimeEffect()
else
self.progress_img.fillAmount = left_time / self.roll_delay_time
end
end
self:ClearRollTimeEffect()
roll_timer_func()
self.roll_timer_id = GlobalTimerQuest:AddPeriodQuest(roll_timer_func, 0.02, -1)
end
function GuildSceneRollItem:ClearRollTimeEffect( )
if self.roll_timer_id then
GlobalTimerQuest:CancelQuest(self.roll_timer_id)
self.roll_timer_id = nil
end
end
-- 根据当前的roll点情况,修改文本引导
function GuildSceneRollItem:UpdateRollStatus( )
local roll_num = self.data.roll_num
local cur_time = TimeUtil:getServerTime()
local start_time = self.model:GetGuildBossRollStartTime()
local cur_stage_finished = self.model:GetGuildBossRollIsFinished()
if self.data.roll_num == 0 then -- 未参与roll点
if cur_stage_finished or ((start_time + self.roll_delay_time) < cur_time) then
self.status_flag_tmp.text = string.format("时间已过", ColorUtil.GRAY_DARK)
self.progress_img.enabled = false
else
self.progress_img.enabled = true
self.status_flag_tmp.text = string.format("点击参与", ColorUtil.GREEN_DARK)
end
self.highest_flag_img.enabled = false
else
if cur_stage_finished then
local highest_role_id = self.model:GetGuildBossRollHighestByOrderId(self.data.order_id)
if highest_role_id == RoleManager.Instance.mainRoleInfo.role_id then
self.status_flag_tmp.text = ""
self.highest_flag_img.enabled = true
else
self.status_flag_tmp.text = string.format("%s 点", "#fdffc2", self.data.roll_num)
self.highest_flag_img.enabled = false
end
self.progress_img.enabled = false
else
self.status_flag_tmp.text = string.format("%s 点", "#fdffc2", self.data.roll_num)
self.highest_flag_img.enabled = false
self.progress_img.enabled = false
end
end
end
function GuildSceneRollItem:SetSelected(selected_index)
self.selected_index = selected_index
if self.is_loaded then
self.selected_img.enabled = self.selected_index == self.index
end
end
function GuildSceneRollItem:__delete( )
if self.award_item then
UIObjPool:getInstance():PushItem(UIObjPool.UIType.AwardItem, self.award_item)
end
self.award_item = nil
self:ClearRollTimeEffect()
end